5 test_invert(const struct tstring
*key
,
6 const struct tstring
*cleartext
,
7 const struct tstring
*ciphertext
)
9 struct aes_ctx encrypt
;
10 struct aes_ctx decrypt
;
11 uint8_t *data
= xalloc(cleartext
->length
);
13 ASSERT (cleartext
->length
== ciphertext
->length
);
14 length
= cleartext
->length
;
16 aes_set_encrypt_key (&encrypt
, key
->length
, key
->data
);
17 aes_encrypt (&encrypt
, length
, data
, cleartext
->data
);
19 if (!MEMEQ(length
, data
, ciphertext
->data
))
21 fprintf(stderr
, "test_invert: Encrypt failed:\nInput:");
22 tstring_print_hex(cleartext
);
23 fprintf(stderr
, "\nOutput: ");
24 print_hex(length
, data
);
25 fprintf(stderr
, "\nExpected:");
26 tstring_print_hex(ciphertext
);
27 fprintf(stderr
, "\n");
31 aes_invert_key (&decrypt
, &encrypt
);
32 aes_decrypt (&decrypt
, length
, data
, data
);
34 if (!MEMEQ(length
, data
, cleartext
->data
))
36 fprintf(stderr
, "test_invert: Decrypt failed:\nInput:");
37 tstring_print_hex(ciphertext
);
38 fprintf(stderr
, "\nOutput: ");
39 print_hex(length
, data
);
40 fprintf(stderr
, "\nExpected:");
41 tstring_print_hex(cleartext
);
42 fprintf(stderr
, "\n");
52 test_cipher(&nettle_aes128
,
53 SHEX("0001020305060708 0A0B0C0D0F101112"),
54 SHEX("506812A45F08C889 B97F5980038B8359"),
55 SHEX("D8F532538289EF7D 06B506A4FD5BE9C9"));
57 test_cipher(&nettle_aes128
,
58 SHEX("14151617191A1B1C 1E1F202123242526"),
59 SHEX("5C6D71CA30DE8B8B 00549984D2EC7D4B"),
60 SHEX("59AB30F4D4EE6E4F F9907EF65B1FB68C"));
62 test_cipher(&nettle_aes128
,
63 SHEX("28292A2B2D2E2F30 323334353738393A"),
64 SHEX("53F3F4C64F8616E4 E7C56199F48F21F6"),
65 SHEX("BF1ED2FCB2AF3FD4 1443B56D85025CB1"));
67 test_cipher(&nettle_aes128
,
68 SHEX("A0A1A2A3A5A6A7A8 AAABACADAFB0B1B2"),
69 SHEX("F5F4F7F684878689 A6A7A0A1D2CDCCCF"),
70 SHEX("CE52AF650D088CA5 59425223F4D32694"));
74 test_cipher(&nettle_aes192
,
75 SHEX("0001020305060708 0A0B0C0D0F101112"
77 SHEX("2D33EEF2C0430A8A 9EBF45E809C40BB6"),
78 SHEX("DFF4945E0336DF4C 1C56BC700EFF837F"));
82 test_cipher(&nettle_aes256
,
83 SHEX("0001020305060708 0A0B0C0D0F101112"
84 "14151617191A1B1C 1E1F202123242526"),
85 SHEX("834EADFCCAC7E1B30664B1ABA44815AB"),
86 SHEX("1946DABF6A03A2A2 C3D0B05080AED6FC"));
89 /* This test case has been problematic with the CBC test case */
90 test_cipher(&nettle_aes256
,
91 SHEX("8d ae 93 ff fc 78 c9 44"
92 "2a bd 0c 1e 68 bc a6 c7"
93 "05 c7 84 e3 5a a9 11 8b"
94 "d3 16 aa 54 9b 44 08 9e"),
95 SHEX("a5 ce 55 d4 21 15 a1 c6 4a a4 0c b2 ca a6 d1 37"),
96 /* In the cbc test, I once got the bad value
97 * "b2 a0 6c d2 2f df 7d 2c 26 d2 42 88 8f 20 74 a2" */
98 SHEX("1f 94 fc 85 f2 36 21 06"
99 "4a ea e3 c9 cc 38 01 0e"));
101 /* From draft NIST spec on AES modes.
103 * F.1 ECB Example Vectors
104 * F.1.1 ECB-AES128-Encrypt
107 test_cipher(&nettle_aes128
,
108 SHEX("2b7e151628aed2a6abf7158809cf4f3c"),
109 SHEX("6bc1bee22e409f96e93d7e117393172a"
110 "ae2d8a571e03ac9c9eb76fac45af8e51"
111 "30c81c46a35ce411e5fbc1191a0a52ef"
112 "f69f2445df4f9b17ad2b417be66c3710"),
113 SHEX("3ad77bb40d7a3660a89ecaf32466ef97"
114 "f5d3d58503b9699de785895a96fdbaaf"
115 "43b1cd7f598ece23881b00e3ed030688"
116 "7b0c785e27e8ad3f8223207104725dd4"));
118 /* F.1.3 ECB-AES192-Encrypt */
120 test_cipher(&nettle_aes192
,
121 SHEX("8e73b0f7da0e6452c810f32b809079e5 62f8ead2522c6b7b"),
122 SHEX("6bc1bee22e409f96e93d7e117393172a"
123 "ae2d8a571e03ac9c9eb76fac45af8e51"
124 "30c81c46a35ce411e5fbc1191a0a52ef"
125 "f69f2445df4f9b17ad2b417be66c3710"),
126 SHEX("bd334f1d6e45f25ff712a214571fa5cc"
127 "974104846d0ad3ad7734ecb3ecee4eef"
128 "ef7afd2270e2e60adce0ba2face6444e"
129 "9a4b41ba738d6c72fb16691603c18e0e"));
131 /* F.1.5 ECB-AES256-Encrypt */
132 test_cipher(&nettle_aes256
,
133 SHEX("603deb1015ca71be2b73aef0857d7781"
134 "1f352c073b6108d72d9810a30914dff4"),
135 SHEX("6bc1bee22e409f96e93d7e117393172a"
136 "ae2d8a571e03ac9c9eb76fac45af8e51"
137 "30c81c46a35ce411e5fbc1191a0a52ef"
138 "f69f2445df4f9b17ad2b417be66c3710"),
139 SHEX("f3eed1bdb5d2a03c064b5a7e3db181f8"
140 "591ccb10d410ed26dc5ba74a31362870"
141 "b6ed21b99ca6f4f9f153e7b1beafed1d"
142 "23304b7a39f9f3ff067d8d8f9e24ecc7"));
144 /* Test aes_invert_key with src != dst */
145 test_invert(SHEX("0001020305060708 0A0B0C0D0F101112"),
146 SHEX("506812A45F08C889 B97F5980038B8359"),
147 SHEX("D8F532538289EF7D 06B506A4FD5BE9C9"));
148 test_invert(SHEX("0001020305060708 0A0B0C0D0F101112"
150 SHEX("2D33EEF2C0430A8A 9EBF45E809C40BB6"),
151 SHEX("DFF4945E0336DF4C 1C56BC700EFF837F"));
152 test_invert(SHEX("0001020305060708 0A0B0C0D0F101112"
153 "14151617191A1B1C 1E1F202123242526"),
154 SHEX("834EADFCCAC7E1B30664B1ABA44815AB"),
155 SHEX("1946DABF6A03A2A2 C3D0B05080AED6FC"));
158 /* Internal state for the first test case:
160 0: a7106950 81cf0e5a 8d5574b3 4b929b0c
161 1: aa1e31c4 c19a8917 12282e4 b23e51eb
162 2: 14be6dac fede8fdc 8fb98878 a27dfb5c
163 3: e80a6f32 431515bb 72e8a651 7daf188b
164 4: c50438c0 d464b2b6 76b875e9 b2b5f574
165 5: d81ab740 746b4d89 ff033aac 44d5ffa2
166 6: 52e6bb4a edadc170 24867df4 6e2ad5d5
167 7: ab1c7365 64d09f00 7718d521 46a3df32
168 8: f1eaad16 1aefdfb 7ba5724d d8499631
169 9: 1020300 2030001 3000102 10203
170 99: 5332f5d8 7def8982 a406b506 c9e95bfd