blob: 71633dd8f71ccac8f0e6190638b62c5217c4f54a [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +00002#include "mbedtls/aes.h"
Paul Bakker33b43f12013-08-20 11:48:36 +02003/* END_HEADER */
Paul Bakker367dae42009-06-28 21:50:27 +00004
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02006 * depends_on:MBEDTLS_AES_C
Paul Bakker33b43f12013-08-20 11:48:36 +02007 * END_DEPENDENCIES
8 */
Paul Bakker5690efc2011-05-26 13:16:06 +00009
Paul Bakker33b43f12013-08-20 11:48:36 +020010/* BEGIN_CASE */
11void aes_encrypt_ecb( char *hex_key_string, char *hex_src_string,
12 char *hex_dst_string, int setkey_result )
Paul Bakker367dae42009-06-28 21:50:27 +000013{
14 unsigned char key_str[100];
15 unsigned char src_str[100];
16 unsigned char dst_str[100];
17 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020018 mbedtls_aes_context ctx;
Paul Bakker69998dd2009-07-11 19:15:20 +000019 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +000020
21 memset(key_str, 0x00, 100);
22 memset(src_str, 0x00, 100);
23 memset(dst_str, 0x00, 100);
24 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020025 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000026
Paul Bakker33b43f12013-08-20 11:48:36 +020027 key_len = unhexify( key_str, hex_key_string );
28 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000029
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020030 TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020031 if( setkey_result == 0 )
Paul Bakker2b222c82009-07-27 21:03:45 +000032 {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020033 TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str, output ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000034 hexify( dst_str, output, 16 );
Paul Bakker367dae42009-06-28 21:50:27 +000035
Paul Bakker33b43f12013-08-20 11:48:36 +020036 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000037 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020038
Paul Bakkerbd51b262014-07-10 15:26:12 +020039exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020040 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000041}
Paul Bakker33b43f12013-08-20 11:48:36 +020042/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000043
Paul Bakker33b43f12013-08-20 11:48:36 +020044/* BEGIN_CASE */
45void aes_decrypt_ecb( char *hex_key_string, char *hex_src_string,
46 char *hex_dst_string, int setkey_result )
Paul Bakker367dae42009-06-28 21:50:27 +000047{
48 unsigned char key_str[100];
49 unsigned char src_str[100];
50 unsigned char dst_str[100];
51 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020052 mbedtls_aes_context ctx;
Paul Bakker69998dd2009-07-11 19:15:20 +000053 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +000054
55 memset(key_str, 0x00, 100);
56 memset(src_str, 0x00, 100);
57 memset(dst_str, 0x00, 100);
58 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000060
Paul Bakker33b43f12013-08-20 11:48:36 +020061 key_len = unhexify( key_str, hex_key_string );
62 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000063
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020064 TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str, key_len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020065 if( setkey_result == 0 )
Paul Bakker2b222c82009-07-27 21:03:45 +000066 {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067 TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str, output ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000068 hexify( dst_str, output, 16 );
Paul Bakker367dae42009-06-28 21:50:27 +000069
Paul Bakker33b43f12013-08-20 11:48:36 +020070 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000071 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020072
Paul Bakkerbd51b262014-07-10 15:26:12 +020073exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020074 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000075}
Paul Bakker33b43f12013-08-20 11:48:36 +020076/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000077
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020078/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker33b43f12013-08-20 11:48:36 +020079void aes_encrypt_cbc( char *hex_key_string, char *hex_iv_string,
80 char *hex_src_string, char *hex_dst_string,
81 int cbc_result )
Paul Bakker367dae42009-06-28 21:50:27 +000082{
83 unsigned char key_str[100];
84 unsigned char iv_str[100];
85 unsigned char src_str[100];
86 unsigned char dst_str[100];
87 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020088 mbedtls_aes_context ctx;
Paul Bakkerf3ccc682010-03-18 21:21:02 +000089 int key_len, data_len;
Paul Bakker367dae42009-06-28 21:50:27 +000090
91 memset(key_str, 0x00, 100);
92 memset(iv_str, 0x00, 100);
93 memset(src_str, 0x00, 100);
94 memset(dst_str, 0x00, 100);
95 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020096 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000097
Paul Bakker33b43f12013-08-20 11:48:36 +020098 key_len = unhexify( key_str, hex_key_string );
99 unhexify( iv_str, hex_iv_string );
100 data_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000101
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200102 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
103 TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, data_len, iv_str, src_str, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200104 if( cbc_result == 0 )
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000105 {
106 hexify( dst_str, output, data_len );
Paul Bakker367dae42009-06-28 21:50:27 +0000107
Paul Bakker33b43f12013-08-20 11:48:36 +0200108 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000109 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200110
Paul Bakkerbd51b262014-07-10 15:26:12 +0200111exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200112 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000113}
Paul Bakker33b43f12013-08-20 11:48:36 +0200114/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000115
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200116/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker33b43f12013-08-20 11:48:36 +0200117void aes_decrypt_cbc( char *hex_key_string, char *hex_iv_string,
118 char *hex_src_string, char *hex_dst_string,
119 int cbc_result )
Paul Bakker367dae42009-06-28 21:50:27 +0000120{
121 unsigned char key_str[100];
122 unsigned char iv_str[100];
123 unsigned char src_str[100];
124 unsigned char dst_str[100];
125 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200126 mbedtls_aes_context ctx;
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000127 int key_len, data_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000128
129 memset(key_str, 0x00, 100);
130 memset(iv_str, 0x00, 100);
131 memset(src_str, 0x00, 100);
132 memset(dst_str, 0x00, 100);
133 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200134 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000135
Paul Bakker33b43f12013-08-20 11:48:36 +0200136 key_len = unhexify( key_str, hex_key_string );
137 unhexify( iv_str, hex_iv_string );
138 data_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000139
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200140 mbedtls_aes_setkey_dec( &ctx, key_str, key_len * 8 );
141 TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, data_len, iv_str, src_str, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200142 if( cbc_result == 0)
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000143 {
144 hexify( dst_str, output, data_len );
Paul Bakker367dae42009-06-28 21:50:27 +0000145
Paul Bakker33b43f12013-08-20 11:48:36 +0200146 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000147 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200148
Paul Bakkerbd51b262014-07-10 15:26:12 +0200149exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200150 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000151}
Paul Bakker33b43f12013-08-20 11:48:36 +0200152/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000153
Aorimnfb67fae2016-01-31 12:30:55 +0100154/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XEX */
155void aes_encrypt_xex( char *hex_key_string, char *hex_iv_string,
156 char *hex_src_string, char *hex_dst_string,
157 int xex_result )
158{
159 unsigned char key_str[100] = { 0, };
160 unsigned char iv_str[100] = { 0, };
161 unsigned char src_str[100] = { 0, };
162 unsigned char dst_str[100] = { 0, };
163 unsigned char output[100] = { 0, };
164 mbedtls_aes_context crypt_ctx, tweak_ctx;
165 int key_len, data_len;
166
167 mbedtls_aes_init( &crypt_ctx );
168 mbedtls_aes_init( &tweak_ctx );
169
170 key_len = unhexify( key_str, hex_key_string );
171 unhexify( iv_str, hex_iv_string );
172 data_len = unhexify( src_str, hex_src_string );
173
174 mbedtls_aes_setkey_enc( &crypt_ctx, key_str, ( key_len * 8 ) / 2 );
175 mbedtls_aes_setkey_enc( &tweak_ctx, key_str + key_len / 2, ( key_len * 8 ) / 2 );
176
177 TEST_ASSERT( mbedtls_aes_crypt_xex( &crypt_ctx, &tweak_ctx, MBEDTLS_AES_ENCRYPT, data_len, iv_str, src_str, output ) == xex_result );
178 if( xex_result == 0 )
179 {
180 hexify( dst_str, output, data_len );
181
182 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
183 }
184
185exit:
186 mbedtls_aes_free( &crypt_ctx );
187 mbedtls_aes_free( &tweak_ctx );
188}
189/* END_CASE */
190
191/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XEX */
192void aes_decrypt_xex( char *hex_key_string, char *hex_iv_string,
193 char *hex_src_string, char *hex_dst_string,
194 int xex_result )
195{
196 unsigned char key_str[100] = { 0, };
197 unsigned char iv_str[100] = { 0, };
198 unsigned char src_str[100] = { 0, };
199 unsigned char dst_str[100] = { 0, };
200 unsigned char output[100] = { 0, };
201 mbedtls_aes_context crypt_ctx, tweak_ctx;
202 int key_len, data_len;
203
204 mbedtls_aes_init( &crypt_ctx );
205 mbedtls_aes_init( &tweak_ctx );
206
207 key_len = unhexify( key_str, hex_key_string );
208 unhexify( iv_str, hex_iv_string );
209 data_len = unhexify( src_str, hex_src_string );
210
211 mbedtls_aes_setkey_dec( &crypt_ctx, key_str, ( key_len * 8 ) / 2 );
212 mbedtls_aes_setkey_enc( &tweak_ctx, key_str + key_len / 2, ( key_len * 8 ) / 2 );
213
214 TEST_ASSERT( mbedtls_aes_crypt_xex( &crypt_ctx, &tweak_ctx, MBEDTLS_AES_DECRYPT, data_len, iv_str, src_str, output ) == xex_result );
215 if( xex_result == 0 )
216 {
217 hexify( dst_str, output, data_len );
218
219 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
220 }
221
222exit:
223 mbedtls_aes_free( &crypt_ctx );
224 mbedtls_aes_free( &tweak_ctx );
225}
226/* END_CASE */
227
Aorimn5f778012016-06-09 23:22:58 +0200228/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
229void aes_encrypt_xts( char *hex_key_string, char *hex_iv_string,
230 char *hex_src_string, char *hex_dst_string,
231 int data_unit_len, int xts_result )
232{
233 unsigned char key_str[100] = { 0, };
234 unsigned char iv_str[100] = { 0, };
235 unsigned char src_str[100] = { 0, };
236 unsigned char dst_str[100] = { 0, };
237 unsigned char output[100] = { 0, };
238 mbedtls_aes_context crypt_ctx, tweak_ctx;
239 int key_len, data_len;
240
241 mbedtls_aes_init( &crypt_ctx );
242 mbedtls_aes_init( &tweak_ctx );
243
244 key_len = unhexify( key_str, hex_key_string );
245 unhexify( iv_str, hex_iv_string );
246 data_len = unhexify( src_str, hex_src_string );
247
248 mbedtls_aes_setkey_enc( &crypt_ctx, key_str, ( key_len * 8 ) / 2 );
249 mbedtls_aes_setkey_enc( &tweak_ctx, key_str + key_len / 2, ( key_len * 8 ) / 2 );
250
251 TEST_ASSERT( mbedtls_aes_crypt_xts( &crypt_ctx, &tweak_ctx, MBEDTLS_AES_ENCRYPT, data_unit_len, iv_str, src_str, output ) == xts_result );
252 if( xts_result == 0 )
253 {
254 hexify( dst_str, output, data_len );
255
256 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
257 }
258
259exit:
260 mbedtls_aes_free( &crypt_ctx );
261 mbedtls_aes_free( &tweak_ctx );
262}
263/* END_CASE */
264
265/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
266void aes_decrypt_xts( char *hex_key_string, char *hex_iv_string,
267 char *hex_src_string, char *hex_dst_string,
268 int data_unit_len, int xts_result )
269{
270 unsigned char key_str[100] = { 0, };
271 unsigned char iv_str[100] = { 0, };
272 unsigned char src_str[100] = { 0, };
273 unsigned char dst_str[100] = { 0, };
274 unsigned char output[100] = { 0, };
275 mbedtls_aes_context crypt_ctx, tweak_ctx;
276 int key_len, data_len;
277
278 mbedtls_aes_init( &crypt_ctx );
279 mbedtls_aes_init( &tweak_ctx );
280
281 key_len = unhexify( key_str, hex_key_string );
282 unhexify( iv_str, hex_iv_string );
283 data_len = unhexify( src_str, hex_src_string );
284
285 mbedtls_aes_setkey_dec( &crypt_ctx, key_str, ( key_len * 8 ) / 2 );
286 mbedtls_aes_setkey_enc( &tweak_ctx, key_str + key_len / 2, ( key_len * 8 ) / 2 );
287
288 TEST_ASSERT( mbedtls_aes_crypt_xts( &crypt_ctx, &tweak_ctx, MBEDTLS_AES_DECRYPT, data_unit_len, iv_str, src_str, output ) == xts_result );
289 if( xts_result == 0 )
290 {
291 hexify( dst_str, output, data_len );
292
293 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
294 }
295
296exit:
297 mbedtls_aes_free( &crypt_ctx );
298 mbedtls_aes_free( &tweak_ctx );
299}
300/* END_CASE */
301
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200302/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker33b43f12013-08-20 11:48:36 +0200303void aes_encrypt_cfb128( char *hex_key_string, char *hex_iv_string,
304 char *hex_src_string, char *hex_dst_string )
Paul Bakker367dae42009-06-28 21:50:27 +0000305{
306 unsigned char key_str[100];
307 unsigned char iv_str[100];
308 unsigned char src_str[100];
309 unsigned char dst_str[100];
310 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200311 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000312 size_t iv_offset = 0;
Paul Bakker69998dd2009-07-11 19:15:20 +0000313 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000314
315 memset(key_str, 0x00, 100);
316 memset(iv_str, 0x00, 100);
317 memset(src_str, 0x00, 100);
318 memset(dst_str, 0x00, 100);
319 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200320 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000321
Paul Bakker33b43f12013-08-20 11:48:36 +0200322 key_len = unhexify( key_str, hex_key_string );
323 unhexify( iv_str, hex_iv_string );
324 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000325
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200326 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
327 TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000328 hexify( dst_str, output, 16 );
329
Paul Bakker33b43f12013-08-20 11:48:36 +0200330 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200331
Paul Bakkerbd51b262014-07-10 15:26:12 +0200332exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200333 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000334}
Paul Bakker33b43f12013-08-20 11:48:36 +0200335/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000336
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200337/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker33b43f12013-08-20 11:48:36 +0200338void aes_decrypt_cfb128( char *hex_key_string, char *hex_iv_string,
339 char *hex_src_string, char *hex_dst_string )
Paul Bakker367dae42009-06-28 21:50:27 +0000340{
341 unsigned char key_str[100];
342 unsigned char iv_str[100];
343 unsigned char src_str[100];
344 unsigned char dst_str[100];
345 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200346 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000347 size_t iv_offset = 0;
Paul Bakker69998dd2009-07-11 19:15:20 +0000348 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000349
350 memset(key_str, 0x00, 100);
351 memset(iv_str, 0x00, 100);
352 memset(src_str, 0x00, 100);
353 memset(dst_str, 0x00, 100);
354 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200355 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000356
Paul Bakker33b43f12013-08-20 11:48:36 +0200357 key_len = unhexify( key_str, hex_key_string );
358 unhexify( iv_str, hex_iv_string );
359 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000360
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200361 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
362 TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000363 hexify( dst_str, output, 16 );
364
Paul Bakker33b43f12013-08-20 11:48:36 +0200365 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200366
Paul Bakkerbd51b262014-07-10 15:26:12 +0200367exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200368 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000369}
Paul Bakker33b43f12013-08-20 11:48:36 +0200370/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000371
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200372/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker556efba2014-01-24 15:38:12 +0100373void aes_encrypt_cfb8( char *hex_key_string, char *hex_iv_string,
374 char *hex_src_string, char *hex_dst_string )
375{
376 unsigned char key_str[100];
377 unsigned char iv_str[100];
378 unsigned char src_str[100];
379 unsigned char dst_str[100];
380 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200381 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100382 int key_len, src_len;
383
384 memset(key_str, 0x00, 100);
385 memset(iv_str, 0x00, 100);
386 memset(src_str, 0x00, 100);
387 memset(dst_str, 0x00, 100);
388 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200389 mbedtls_aes_init( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100390
391 key_len = unhexify( key_str, hex_key_string );
392 unhexify( iv_str, hex_iv_string );
393 src_len = unhexify( src_str, hex_src_string );
394
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200395 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
396 TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_len, iv_str, src_str, output ) == 0 );
Paul Bakker556efba2014-01-24 15:38:12 +0100397 hexify( dst_str, output, src_len );
398
399 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200400
Paul Bakkerbd51b262014-07-10 15:26:12 +0200401exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200402 mbedtls_aes_free( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100403}
404/* END_CASE */
405
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200406/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker556efba2014-01-24 15:38:12 +0100407void aes_decrypt_cfb8( char *hex_key_string, char *hex_iv_string,
408 char *hex_src_string, char *hex_dst_string )
409{
410 unsigned char key_str[100];
411 unsigned char iv_str[100];
412 unsigned char src_str[100];
413 unsigned char dst_str[100];
414 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200415 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100416 int key_len, src_len;
417
418 memset(key_str, 0x00, 100);
419 memset(iv_str, 0x00, 100);
420 memset(src_str, 0x00, 100);
421 memset(dst_str, 0x00, 100);
422 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200423 mbedtls_aes_init( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100424
425 key_len = unhexify( key_str, hex_key_string );
426 unhexify( iv_str, hex_iv_string );
427 src_len = unhexify( src_str, hex_src_string );
428
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200429 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
430 TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_len, iv_str, src_str, output ) == 0 );
Paul Bakker556efba2014-01-24 15:38:12 +0100431 hexify( dst_str, output, src_len );
432
433 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200434
Paul Bakkerbd51b262014-07-10 15:26:12 +0200435exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200436 mbedtls_aes_free( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100437}
438/* END_CASE */
439
Simon Butcher03018842018-04-22 22:57:58 +0100440/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_OFB */
441void aes_encrypt_ofb( int fragment_size, char *hex_key_string,
Simon Butcher00131442018-05-22 22:40:36 +0100442 char *hex_iv_string, char *hex_src_string,
443 char *hex_dst_string )
Simon Butcher03018842018-04-22 22:57:58 +0100444{
Simon Butchere416bf92018-06-02 18:28:32 +0100445 unsigned char key_str[32];
446 unsigned char iv_str[16];
447 unsigned char src_str[64];
448 unsigned char dst_str[64];
449 unsigned char output[32];
Simon Butcher03018842018-04-22 22:57:58 +0100450 mbedtls_aes_context ctx;
451 size_t iv_offset = 0;
452 int in_buffer_len;
453 unsigned char* src_str_next;
Simon Butcherdbe7fbf2018-04-29 14:51:35 +0100454 int key_len;
Simon Butcher03018842018-04-22 22:57:58 +0100455
Simon Butcherb7836e12018-06-02 18:36:49 +0100456 memset( key_str, 0x00, sizeof( key_str ) );
457 memset( iv_str, 0x00, sizeof( iv_str ) );
458 memset( src_str, 0x00, sizeof( src_str ) );
459 memset( dst_str, 0x00, sizeof( dst_str ) );
460 memset( output, 0x00, sizeof( output ) );
Simon Butcher03018842018-04-22 22:57:58 +0100461 mbedtls_aes_init( &ctx );
462
Simon Butchere416bf92018-06-02 18:28:32 +0100463 TEST_ASSERT( strlen( hex_key_string ) <= ( 32 * 2 ) );
464 TEST_ASSERT( strlen( hex_iv_string ) <= ( 16 * 2 ) );
465 TEST_ASSERT( strlen( hex_src_string ) <= ( 64 * 2 ) );
466 TEST_ASSERT( strlen( hex_dst_string ) <= ( 64 * 2 ) );
467
Simon Butcher03018842018-04-22 22:57:58 +0100468 key_len = unhexify( key_str, hex_key_string );
Simon Butcherdbe7fbf2018-04-29 14:51:35 +0100469 unhexify( iv_str, hex_iv_string );
Simon Butcher03018842018-04-22 22:57:58 +0100470 in_buffer_len = unhexify( src_str, hex_src_string );
471
Simon Butcherad4e4932018-04-29 00:43:47 +0100472 TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 ) == 0 );
Simon Butcher03018842018-04-22 22:57:58 +0100473 src_str_next = src_str;
474
475 while( in_buffer_len > 0 )
476 {
477 TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset,
478 iv_str, src_str_next, output ) == 0 );
479
480 hexify( dst_str, output, fragment_size );
481 TEST_ASSERT( strncmp( (char *) dst_str, hex_dst_string,
Simon Butcher00131442018-05-22 22:40:36 +0100482 ( 2 * fragment_size ) ) == 0 );
Simon Butcher03018842018-04-22 22:57:58 +0100483
484 in_buffer_len -= fragment_size;
485 hex_dst_string += ( fragment_size * 2 );
486 src_str_next += fragment_size;
487
488 if( in_buffer_len < fragment_size )
489 fragment_size = in_buffer_len;
490 }
491
492exit:
493 mbedtls_aes_free( &ctx );
494}
495/* END_CASE */
496
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200497/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Paul Bakker33b43f12013-08-20 11:48:36 +0200498void aes_selftest()
Paul Bakker3d360822009-07-05 11:29:38 +0000499{
Andres AG93012e82016-09-09 09:10:28 +0100500 TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 );
Paul Bakker3d360822009-07-05 11:29:38 +0000501}
Paul Bakker33b43f12013-08-20 11:48:36 +0200502/* END_CASE */