J'ai rapidement lut lrw.c de crypto sous linux.
http://lxr.free-electrons.com/source/crypto/lrw.cPotentiellement j'avais bien compris le concept de la variable I (tweak) qui est "multiplié" avec la key2, mais même dans ces sources plutôt bien commenté, la key2 arrive comme par magie :/
Code:
30 struct priv {
31 struct crypto_cipher *child;
32 /* optimizes multiplying a random (non incrementing, as at the
33 * start of a new sector) value with key2, we could also have
34 * used 4k optimization tables or no optimization at all. In the
35 * latter case we would have to store key2 here */
36 struct gf128mul_64k *table;
37 /* stores:
38 * key2*{ 0,0,...0,0,0,0,1 }, key2*{ 0,0,...0,0,0,1,1 },
39 * key2*{ 0,0,...0,0,1,1,1 }, key2*{ 0,0,...0,1,1,1,1 }
40 * key2*{ 0,0,...1,1,1,1,1 }, etc
41 * needed for optimized multiplication of incrementing values
42 * with key2 */
43 be128 mulinc[128];
gf128mul_64k étant la fonction de la classe gf128.c qui permet de faire la "multiplication" dans le champs des corps finis de Galois.
be128 étant la fonction qui permet de définir la taille les blocs de 128 bits de la classe b128.c
OMGWTFBBQ!!!11, d'où elle vient cette f**cking key2 ???