| Age | Commit message (Collapse) | Author |
|
|
|
L'implémentation précédente n'était pas cohérente. Étant données deux
chaînes X et Y de longueur x et y, et Z=X∥Y de longueur z=x+y,
- pad10* et la construction des tweaks fonctionnaient selon la logique
"indices faibles = LSB", donc
Z[0] = Y[0]
Z[z-1] = X[x-1]
- le découpage de M, C et A en blocs fonctionnait selon la logique
"indices faibles = premiers blocs", donc
Z[0] = X[0]
Z[z-1] = Y[y-1]
En conséquence, la façon dont M, C et A étaient paddés n'avait aucun
sens, e.g. pour un message M de taille 35, pad10*(M*) donnait :
{ M[34], M[33], M[32], 0b10000000, 0, … }
Les deux seules façons logiques de padder M* sont
{ M[32], M[33], M[34], 0b10000000, 0, … }
ou
{ M[2], M[1], M[0], 0b10000000, 0, … }
Après revue d'autres implémentations de ΘCB3 et SCT-2, j'ai choisi de
suivre la convention MSB. En conséquence, quand la spécification dit
Z = X∥Y
L'implémentation traduira :
Z[] = { X[0], … X[x-1], Y[0], … Y[y-1] }
Dans la même logique, les compteurs de blocs seront insérés MSB
d'abord et paddés en conséquence, e.g.
j=0x01020304 ≡ J[] = { 0, …, 0x01, 0x02, 0x03, 0x04 }
|
|
Cf. db83bae, surtout par souci d'homogénéité.
|
|
- α₀ devient M
- α₁ M²
- α₂ M³
- α₃ M⁴
- α₄ M_R
- α₅ M_R²
- α₆ M_R³
|
|
|
|
- 2 lignes entre le dernier #include et le début du code,
- 2 lignes avant le #endif final,
- pas d'espaces superflus pour LANES_NB (résidu d'alignement avec
d'autres variables)
|
|
Si e.g. multiplications.h changeait, tweakey.o n'était pas recompilé…
|
|
De façon à ce que d'autres versions puissent réutiliser l'un ou
l'autre.
|
|
1. Ça ressemble plus à ce qu'on voit sur le schéma.
2. Pour une raison obscure, la version incrémentée bouffe souvent plus
de ROM et plus de cycles (jusqu'à 5% de ROM sur ARM).
|
|
Problème introduit par 3a57031.
|
|
Changements mineurs :
- remplacement du tableau intermédiaire F par une fonction,
- réécriture de la couche linéaire avec des boucles.
Le but est d'améliorer la lisibilité par rapport à la spécification,
tout en limitant les différences avec la version "felicsref".
|
|
Ajout du nonce dans le tweak une bonne fois pour toute
à l'initialisation de l'algorithme, au lieu de le rajouter à chaque
tour de boucle.
Similaire à notre implémentation de SCT-2, et à l'implémentation de
référence de Deoxys-I.
|
|
|
|
Bug introduit par ce047dd.
|
|
- "block number" → "block index"
- "192" → "t"
- boucle de copie de l'index
- utilisation de size_t :
- par définition, aucune implémentation ne pourra traiter plus
d'octets que SIZE_MAX (donc pas plus de blocs),
- pas de raison de forcer un index de 64 bits sur ces pauvres
ATmega et MSP430.
|
|
Pas besoin de la condition. Ajout d'un exemple.
|
|
L'implémentation de référence se basait sur les indices figurant dans
le papier de Deoxys. Deux questions à résoudre, que d'autres se sont
sans doute déjà posées :
- Est-ce que ce l-1 est normal dans le papier de Deoxys ?
- Est-ce que nos changements d'indices sont bien tous corrects ?
En tout cas, les implémentations Python et C sont maintenant d'accord.
|
|
Ça m'embêtait qu'on liste plusieurs personnes, puis qu'on dise "the
implementer has…" ; repompé le "hereby denoted…" de Keccak.
|
|
Un peu de machinerie à mettre en place pour permettre l'ajout de
fichiers arbitraires dans une implémentation.
|
|
|
|
Et suppression de l'implémentation add_tweakeysequences, qui n'a plus
aucun intérêt (plus lente et plus grosse que les deux autres).
|
|
On utilise des minuscules dans la spécification.
|
|
|
|
Pour qu'ils soient plus proches du nom donné dans la spécification.
|
|
Les renommages récents les ont chamboulées un peu.
|
|
Au final, il n'est pas moins performant que l'autre ; cf. issue #4.
|
|
- Changement de l'implémentation de référence en conséquence (les
compilateurs savent très bien optimiser les deux shifts en un seul
AND)
- Retouche du phrasé : "multiplication αᵢ" plutôt que "αᵢ
multiplication". Je n'ai pas de pointeurs vers une règle de
grammaire particulière, mais c'est par comparaison avec "Planet
Earth" ou "Operation Overlord".
|
|
|
|
|
|
Avec une phrase de documentation en prime pour chaque fichier.
Cf. issue #2.
|
|
Deux lignes vides avant le #endif, sauf pour parameters.h et
constants.h qui ne contiennent que des directives de préprocesseur.
|
|
|
|
Aucune idée de pourquoi j'avais insisté pour nommer les deux
"parameters" plutôt que de distinguer les constantes des paramètres.
Peut-être par souci de compatibilité avec FELICS, qui utilise
constants.h.
🤷
|
|
|
|
Au passage, officialisation de la version "i applications successives
de M pour calculer Mⁱ" du key schedule.
|