| Age | Commit message (Collapse) | Author |
|
Pas besoin de la condition. Ajout d'un exemple.
|
|
Dans le cadre d'une croisade contre les range(len(…)).
Suppression d'un paramètre inutile dans la foulée.
|
|
Plutôt que int() ; moins de bruit.
… Au passage, simplification (j'espère) de ArrayToBlockbytesMatrix() :
- pas besoin d'initialiser la matrice à zéro ; suffit d'ajouter les
octets et les blocs comme ils viennent,
- AFAICT,
int((length + (BLOCK_BYTES - (length % BLOCK_BYTES))) / BLOCK_BYTES)
quand length % BLOCK_BYTES > 0, c'est juste une façon compliquée
d'écrire
int(length/BLOCK_BYTES) + 1
|
|
- espaces avant ':'
- espaces en trop après ','
- parenthèses dans les if
- levée d'exception plutôt que 'return None' implicite
Simplification de genkat_aead.py grâce à l'exception levée par le
module.
|
|
|
|
|
|
Utilisation d'une enum, pour que les valeurs possibles soient
explicites.
Renommage des points d'entrée pour qu'ils soient uniformes et
interchangeables.
Transformation du tag en liste plus bas pour que lilliput.py ne se
soucie pas des détails d'implémentation des fonctions en-dessous.
|
|
|
|
Et des fonctions d'initialisation. Et d'une fonction non-utilisée dans
le mode SCT-2.
|
|
|
|
Ce serait mieux si l'API renvoyait une exception… Un jour.
|
|
|
|
|
|
|
|
Aurais dû les enlever dans 23d2fea280302c01a818e46e4a43c884eac03865.
|
|
En passant :
- remplacement de paramètres 0/1 par des booléens/des enums (pour
TweakMessage en particulier, ça simplifie pas mal la logique)
- construction de M (resp. C pour le déchiffrement) au fur et à
mesure, i.e. avec des listes vides, plutôt qu'en pré-allouant des
tableaux potentiellement trop gros en cas de padding
|
|
Pour que le lien soit plus facile à faire avec la spec.
|
|
|
|
On peut tout déduire de len(tweak) / len(key) ; la seule raison
d'utiliser autant de constantes en C est que les tableaux se dégradent
en pointeurs, donc c'est où les constantes, où une tétrachiée
d'arguments.
|
|
|
|
Retrait de quelques variables globales par la même occasion. Renommage
de "round" en "i" pour 1) coller à la spec 2) éviter le conflit avec
le builtin "round".
|
|
|
|
|
|
tweak_bits est constant pour un mode donné ; rounds se déduit de la
taille de clé.
|
|
Création d'un nouveau module "helpers" qui contiendra les fonctions
utilisées par les deux modes.
|
|
Encore un peu de duplication sur les longueurs de clés valides. On y
travaille.
|
|
|
|
Semblable en tout point à l'implémentation de référence, sauf pour des
optimisations manuelles dans tweakey.c.
Les gains sont significatifs même si surprenants :
Lilliput-I-128 on AVR (vref with -O3)
code_size: -3.21% (7420 ↘ 7182)
code_ram: -2.08% (530 ↘ 519)
code_time: -26.13% (176922 ↘ 130701)
Lilliput-I-192 on AVR (vref with -O3)
code_size: -3.66% (7550 ↘ 7274)
code_ram: -1.90% (578 ↘ 567)
code_time: -28.34% (228210 ↘ 163530)
Lilliput-I-256 on AVR (vref with -O3)
code_size: -4.05% (7698 ↘ 7386)
code_ram: -1.71% (642 ↘ 631)
code_time: -29.87% (301863 ↘ 211704)
Lilliput-II-128 on AVR (vref with -O3)
code_size: -3.04% (6704 ↘ 6500)
code_ram: -2.94% (511 ↘ 496)
code_time: -25.97% (181884 ↘ 134648)
Lilliput-II-192 on AVR (vref with -O3)
code_size: -3.56% (6682 ↘ 6444)
code_ram: -1.97% (559 ↘ 548)
code_time: -26.30% (264608 ↘ 195028)
Lilliput-II-256 on AVR (vref with -O3)
code_size: -4.06% (6804 ↘ 6528)
code_ram: -1.77% (623 ↘ 612)
code_time: -28.47% (354220 ↘ 253368)
Lilliput-I-128 on MSP (vref with -O3)
code_time: -17.72% (153285 ↘ 126129)
Lilliput-I-192 on MSP (vref with -O3)
code_size: -1.02% (8466 ↘ 8380)
code_time: -19.77% (199203 ↘ 159828)
Lilliput-I-256 on MSP (vref with -O3)
code_time: -20.90% (268416 ↘ 212328)
Lilliput-II-128 on MSP (vref with -O3)
code_size: -2.49% (6336 ↘ 6178)
code_time: -13.25% (172179 ↘ 149363)
Lilliput-II-192 on MSP (vref with -O3)
code_size: -1.22% (6406 ↘ 6328)
code_time: -17.93% (227943 ↘ 187063)
Lilliput-II-256 on MSP (vref with -O3)
code_size: -1.30% (6600 ↘ 6514)
code_time: -19.98% (307751 ↘ 246251)
Lilliput-I-128 on ARM (vref with -O3)
code_time: -16.94% (104944 ↘ 87170)
Lilliput-I-192 on ARM (vref with -O3)
code_time: -18.41% (132736 ↘ 108295)
Lilliput-I-256 on ARM (vref with -O3)
code_time: -18.74% (175979 ↘ 143001)
Lilliput-II-128 on ARM (vref with -O3)
code_time: -17.63% (114004 ↘ 93907)
Lilliput-II-192 on ARM (vref with -O3)
code_time: -17.55% (157405 ↘ 129780)
Lilliput-II-256 on ARM (vref with -O3)
code_time: -18.44% (206440 ↘ 168382)
Lilliput-I-128 on PC (vref with -O3)
code_time: -11.43% (11744 ↘ 10402)
Lilliput-I-192 on PC (vref with -O3)
code_time: -10.54% (14593 ↘ 13055)
Lilliput-I-256 on PC (vref with -O3)
code_time: -11.80% (18856 ↘ 16631)
Lilliput-II-128 on PC (vref with -O3)
code_size: -1.02% (7421 ↘ 7345)
code_time: -9.11% (13080 ↘ 11889)
Lilliput-II-192 on PC (vref with -O3)
code_time: -10.51% (16809 ↘ 15043)
Lilliput-II-256 on PC (vref with -O3)
code_time: -10.96% (21970 ↘ 19561)
|
|
… En vrai je ne vois pas de bonne raison de se soucier des espaces en
bout de ligne. Les outils de diff savent les ignorer, les éditeurs
savent les ignorer…
🤷
|
|
|
|
|
|
Fournie par @aadomn.
|
|
|
|
|
|
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.
|
|
Pour correspondre à genkat_aead.c.
|
|
|
|
|
|
Et ré-adaptation de l'API de lilliput.py pour simplifier
l'interfaçage ; et retrait des print() pour accélérer la génération
des vecteurs (qui même comme ça prend 2 bonnes minutes).
NB : pour le moment, les vecteurs ne correspondent pas…
|
|
Pour qu'on puisse plus facilement manipuler les entrées/sorties.
Pour le moment le round-trip chiffrement/déchiffrement marche.
import lilliput
message = 'Hello 🌐!'
adata = 'Signed: Kévin'
for mode in 1,2:
for keylen in 128, 192, 256:
ct, tag = lilliput.mainEnc(message, adata, mode, keylen)
pt = lilliput.mainDec(ct, tag, adata, mode, keylen)
assert message == pt
|
|
|
|
Ç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.
|
|
- retrait de stdio.h (inutile)
- "aération" du prototype de _state_init
|
|
- fins de ligne UNIX (\n)
- espaces plutôt que tabulations
|
|
Dans le but de rendre
diff -ru ref add_threshold
plus digeste.
|
|
- ordre alphabétique des auteurs,
- un auteur par ligne, date sur une ligne séparée : maintenance et
diff plus simples,
- brève description de chaque fichier.
|
|
Modifications nécessaires dans l'infra :
- retrait conditionnel de test-tweakey, vu que l'API n'est pas la même
pour l'implémentation à seuil,
- retrait conditionnel de l'avertissement "-Wparentheses", plus
agaçant qu'autre chose sur les calculs booléens de cipher.c, e.g.
y_hi&3 ^ (y_hi&8)>>1
où la priorité est intuitive (shifts avant AND avant XOR). C'est
dommage de perdre les avertissements sur if (a&b == c), mais tant
pis… On va compter sur La Suite De Test®©™ pour nous couvrir.
Co-authored-by: Alexandre Adomnicai <a.adomnicai@trusted-objects.com>
Co-authored-by: leo <leo.reynaud17@gmail.com>
|
|
|
|
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).
|