Les tests de validation

On donne deux sortes de batteries de tests de validation .
La première fournie par la publication FIPS PUB NIST 197 permet de controler l'évolution du tableau State[][] au cours des 15 rounds , à l'encryptage et au décryptage .
Dans ce type de test la source et la clef sont imposés.

La seconde batterie de tests est définie par l' AES Validation Tests Suite .
Elle donne les valeurs d'encryptage pour une source fixe (16 bytes tous égaux à 0x00)
4 tests différents correspondants chacun à une valeur initiale de la clef qui est 0 ,8, 12, 14 sont proposés.
Pour une valeur initiale de la clef le tests effectue 64 cryptages.

Les tests de controle de State[][]

On sait que les fonctions qui interviennent au cryptage (resp décryptage) utilisent toutes
le tableau State[4]][4].
Suivre l'évolution des valeurs prises par ce tableau au cours des 15 rounds des algorithmes
est très important.
Les valeurs de la clef d'encryptage de même que la source sont imposés(voir ci dessous).
Le fichier source tencrypt.c effectue le test à l'encryptage.
Le fichier source tdecrypt.c effectue le test au decryptage.
Tous ces fichiers ainsi que les fichiers de référence des tests tencrypt256 et tdecrypt256 ( voir ci dessous)
se trouvent dans le dossier tests des sources Les tests .

Les controles à l'encryptage

Pour chaque round rd sont affichés :

input: valeur initiale à chiffrer (round 0 uniquement)

start: valeur de State au début du round rd
s_box: valeur de State après SubBytes()
s_row: valeur de State après ShiftRows()
m_col: valeur de State après Mixcolumns()
k_sch: nouvelle valeur de la clef après AddRoundKey()

output: la valeur encryptée.(round 14 uniquement)

Affichage (partiel) du test
Le test impose une clef fixe et une source fixe.
clef: 	000102030405060708090A0B0C0D0F1012131415161718191A1B1C1D1F
source: 	00112233445566778899AABBCCDDEEFF 
Le test se lance par $:./tencrypt



round[00]_input   00112233445566778899AABBCCDDEEFF
round[00]_ksch    000102030405060708090A0B0C0D0E0F

round[01]_start   00102030405060708090A0B0C0D0E0F0
round[01]_sbox    63CAB7040953D051CD60E0E7BA70E18C
round[01]_srow    6353E08C0960E104CD70B751BACAD0E7
round[01]_mcol    5F72641557F5BC92F7BE3B291DB9F91A
round[01]_ksch    101112131415161718191A1B1C1D1E1F
..................................................
round[14]_start   627BCEB9999D5AAAC945ECF423F56DA5
round[14]_sbox    AA218B56EE5EBEACDD6ECEBF26E63C06
round[14]_srow    AA5ECE06EE6E3C56DDE68BAC2621BEBF
round[14]_ksch    24FC79CCBF0979E9371AC23C6D68DE36

round[14]_output  8EA2B7CA516745BFEAFC49904B496089

Les valeurs de références du test sont données par le fichier texte encrypt256.

Les controles au décryptage

Pour chaque round rd sont affichés :

input: valeur initiale à déchiffrer (round 0 uniquement)

istart: valeur de State au début du round rd
is_box: valeur de State après InvSubBytes()
is_row: valeur de State après InvShiftRows()
im_col: valeur de State après Mixcolumns()
ik_sch: nouvelle valeur de la clef après AddRoundKey()
ik_add: nouvelle valeur de State après AddRoundKey()

ioutput: la valeur décryptée.(round 14 uniquement)

Affichage (partiel) du test
Le test impose une clef fixe et une source fixe ( celle encryptée par tencrypt).
clef: 	000102030405060708090A0B0C0D0F1012131415161718191A1B1C1D1F
source:  8EA2B7CA516745BFEAFC49904B496089 
Le test se lance par $:./tdecrypt

round[00]_input   8EA2B7CA516745BFEAFC49904B496089
round[00]_iksch   24FC79CCBF0979E9371AC23C6D68DE36

round[01]_istart   AA5ECE06EE6E3C56DDE68BAC2621BEBF
round[01]_isrow    AA218B56EE5EBEACDD6ECEBF26E63C06
round[01]_isbox    627BCEB9999D5AAAC945ECF423F56DA5
round[01]_iksch    4E5A6699A9F24FE07E572BAACDF8CDEA
round[01]_ikadd    2C21A820306F154AB712C75EEE0DA04F
..................................................
round[14]_istart   6353E08C0960E104CD70B751BACAD0E7
round[14]_isrow    63CAB7040953D051CD60E0E7BA70E18C
round[14]_isbox    00102030405060708090A0B0C0D0E0F0
round[14]_iksch    000102030405060708090A0B0C0D0E0F

round[14]_output   00112233445566778899AABBCCDDEEFF

Les valeurs de références du test sont données par le fichier texte decrypt256.

Les tests de l'AES Validation Tests Suite

Pour ces tests la source est fixe et vaut :00,00,00,.....00 . (16 bytes).
La clef vaut initialement (X0,00,00,00,00,....00) (X = 0,8,C,E en hexadécimal)
Les valeurs succéssives de la clef lors de chaque test (64 en tout) sont alors :
00 :(X0,00,00,00,00,...,00)
01 :(FX,00,00,00,00,...,00)
02 :(FF,X0,00,00,00,...,00)
03 :(FF,FX,00,00,00,...,00)
04 :(FF,FF,X0,00,00,...,00)
..........................
63 :(FF,FF,FF,FF,FF,....,FF)

La source de ce test est fipsvalid.c.
Elle se trouve dans le dossier tests de sources : Les tests .

Affichage (partiel)du test pour X=8
Le test se lance par $:./fipsvalid
 Valeur initiale de la clef :(0,8,12,14) 8

8000000000000000000000000000000000000000000000000000000000000000
E35A6DCB19B201A01EBCFA8AA22B5759
F800000000000000000000000000000000000000000000000000000000000000
9CF4893ECAFA0A0247A898E040691559
FF80000000000000000000000000000000000000000000000000000000000000
F23E5B600EB70DBCCF6C0B1D9A68182C
................................................................

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
4BF85F1B5D54ADBC307B0A048389ADCB