| 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 }
|
|
Une traduction automatique de la version en nom de dossier crypto_aead
transformerait v1.0 en v10, or
1. nos dossiers s'appelaient v1
2. un jour on aura peut-être une version 10
(Le schéma de nommage crypto_aead ouvre la porte a pas mal
d'ambiguïtés, de toute façon…)
|
|
|
|
🤦
|
|
Cassé par b29cc9d.
Léger ajustement du Makefile pour que les plantages soient plus
simples à comprendre.
|
|
|
|
|
|
Cf. ef17fe7, surtout par souci d'homogénéité.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- α₀ devient M
- α₁ M²
- α₂ M³
- α₃ M⁴
- α₄ M_R
- α₅ M_R²
- α₆ M_R³
|
|
|
|
L'idée étant que tous les scripts qui génèrent des dossiers au format
crypto_aead consultent ce fichier au lieu de coder la version en dur.
Un tag git pourrait probablement être utilisé au lieu d'un fichier.
À réfléchir.
|
|
|
|
|
|
|
|
|
|
|
|
Pour que le lien avec la spec saute aux yeux.
|
|
La boucle précédente forçait l'arrêt au premier échec ; avec la
nouvelle implémentation, "make -k" itère sur toutes les
$(test_variants).
Pratique pour afficher tous les vecteurs qui ont changé d'un seul
coup…
|
|
|
|
- 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)
|
|
Plus facile à lire, je trouve (pas besoin de se demander "c'est quoi
cette division ?" à chaque fois).
|
|
|
|
Calcul des sous-clés à la volée pendant le chiffrement.
|
|
|
|
Apparemment les différents gcc de FELICS arrivent encore à comprendre
qu'ils peuvent inligner les multiplications ; c'est quand on passe par
un tableau de pointeurs de fonction qu'ils baissent les bras.
|
|
Plutôt que d'ajouter -Wno-unused-functin, on pourrait aussi déclarer
les multiplications "static inline", ce qui par convention esquive les
avertissements sur la non-utilisation.
|
|
|
|
|
|
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 4aa9eec.
|
|
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".
|
|
|
|
Pour aider à l'implémentation VHDL.
|
|
Suite à la refacto de la gestion du tweak dans Lilliput-Ⅰ.
|
|
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.
|
|
|