blob: f4950a08347bb412867dda8ac50d38af9cc357d8 [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"
Gilles Peskine5fcdf492023-03-16 14:38:29 +01003
4/* Test AES with a copied context.
5 *
6 * master, enc and dec must be AES context objects. They don't need to
7 * be initialized, and are left freed.
8 */
Yanray Wangb67b4742023-10-31 17:10:32 +08009#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine5fcdf492023-03-16 14:38:29 +010010static int test_copy(const data_t *key,
11 mbedtls_aes_context *master,
12 mbedtls_aes_context *enc,
13 mbedtls_aes_context *dec)
14{
15 unsigned char plaintext[16] = {
16 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
17 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
18 };
19 unsigned char ciphertext[16];
20 unsigned char output[16];
21
22 // Set key and encrypt with original context
23 mbedtls_aes_init(master);
24 TEST_ASSERT(mbedtls_aes_setkey_enc(master, key->x,
25 key->len * 8) == 0);
26 TEST_ASSERT(mbedtls_aes_crypt_ecb(master, MBEDTLS_AES_ENCRYPT,
27 plaintext, ciphertext) == 0);
28 *enc = *master;
29
30 // Set key for decryption with original context
31 mbedtls_aes_init(master);
32 TEST_ASSERT(mbedtls_aes_setkey_dec(master, key->x,
33 key->len * 8) == 0);
34 *dec = *master;
35
36 // Wipe the original context to make sure nothing from it is used
37 memset(master, 0, sizeof(*master));
38
39 // Encrypt with copied context
40 TEST_ASSERT(mbedtls_aes_crypt_ecb(enc, MBEDTLS_AES_ENCRYPT,
41 plaintext, output) == 0);
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +010042 TEST_MEMORY_COMPARE(ciphertext, 16, output, 16);
Gilles Peskine5fcdf492023-03-16 14:38:29 +010043 mbedtls_aes_free(enc);
44
45 // Decrypt with copied context
46 TEST_ASSERT(mbedtls_aes_crypt_ecb(dec, MBEDTLS_AES_DECRYPT,
47 ciphertext, output) == 0);
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +010048 TEST_MEMORY_COMPARE(plaintext, 16, output, 16);
Gilles Peskine5fcdf492023-03-16 14:38:29 +010049 mbedtls_aes_free(dec);
50
51 return 1;
52
53exit:
54 /* Bug: we may be leaving something unfreed. This is harmless
55 * in our built-in implementations, but might cause a memory leak
56 * with alternative implementations. */
57 return 0;
58}
Yanray Wang85c30232023-05-16 10:07:56 +080059#endif
Gilles Peskine5fcdf492023-03-16 14:38:29 +010060
Paul Bakker33b43f12013-08-20 11:48:36 +020061/* END_HEADER */
Paul Bakker367dae42009-06-28 21:50:27 +000062
Paul Bakker33b43f12013-08-20 11:48:36 +020063/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020064 * depends_on:MBEDTLS_AES_C
Paul Bakker33b43f12013-08-20 11:48:36 +020065 * END_DEPENDENCIES
66 */
Paul Bakker5690efc2011-05-26 13:16:06 +000067
Paul Bakker33b43f12013-08-20 11:48:36 +020068/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010069void aes_encrypt_ecb(data_t *key_str, data_t *src_str,
70 data_t *dst, int setkey_result)
Paul Bakker367dae42009-06-28 21:50:27 +000071{
Paul Bakker367dae42009-06-28 21:50:27 +000072 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020073 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000074
Paul Bakker367dae42009-06-28 21:50:27 +000075 memset(output, 0x00, 100);
76
Gilles Peskine449bd832023-01-11 14:50:10 +010077 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000078
Gilles Peskine449bd832023-01-11 14:50:10 +010079 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == setkey_result);
80 if (setkey_result == 0) {
81 TEST_ASSERT(mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output) == 0);
Paul Bakker367dae42009-06-28 21:50:27 +000082
Gilles Peskine449bd832023-01-11 14:50:10 +010083 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
Paul Bakker2b222c82009-07-27 21:03:45 +000084 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020085
Paul Bakkerbd51b262014-07-10 15:26:12 +020086exit:
Gilles Peskine449bd832023-01-11 14:50:10 +010087 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000088}
Paul Bakker33b43f12013-08-20 11:48:36 +020089/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000090
Dave Rodgman4cc6fb92024-01-14 18:13:05 +000091/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
92void aes_encrypt_ctr_multipart(int length, int step_size)
93{
94 unsigned char key[16];
95 unsigned char ctr_a[16];
96 unsigned char ctr_b[16];
97 unsigned char stream_block_a[16];
98 unsigned char stream_block_b[16];
99 unsigned char *input = NULL;
100 unsigned char *output_a = NULL;
101 unsigned char *output_b = NULL;
102 mbedtls_aes_context ctx;
103 size_t nc_off_a, nc_off_b;
104
105 TEST_ASSERT(length >= 0);
106 TEST_ASSERT(step_size > 0);
107
108 TEST_CALLOC(input, length);
109 TEST_CALLOC(output_a, length);
110 TEST_CALLOC(output_b, length);
111
112 // set up a random key
113 mbedtls_test_rnd_std_rand(NULL, key, sizeof(key));
114
115 // random input
116 mbedtls_test_rnd_std_rand(NULL, input, sizeof(input));
117
118
119 // complete encryption in one call
120 mbedtls_aes_init(&ctx);
121 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key, sizeof(key) * 8) == 0);
122 memset(ctr_a, 0, sizeof(ctr_a));
123 memset(stream_block_a, 0, sizeof(stream_block_a));
124 nc_off_a = 0;
125 TEST_EQUAL(mbedtls_aes_crypt_ctr(&ctx, length, &nc_off_a, ctr_a,
126 stream_block_a, input, output_a), 0);
127 mbedtls_aes_free(&ctx);
128
129
130 // encrypt in multiple steps of varying size
131 mbedtls_aes_init(&ctx);
132 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key, sizeof(key) * 8) == 0);
133 memset(ctr_b, 0, sizeof(ctr_b));
134 memset(stream_block_b, 0, sizeof(stream_block_b));
135 nc_off_b = 0;
136 size_t remaining = length;
137 unsigned char *ip = input, *op = output_b;
138 while (remaining != 0) {
139 size_t l = MIN(remaining, (size_t) step_size);
140 step_size *= 2;
141 remaining -= l;
142 TEST_EQUAL(mbedtls_aes_crypt_ctr(&ctx, l, &nc_off_b, ctr_b, stream_block_b, ip, op), 0);
143 ip += l;
144 op += l;
145 }
146
147 // finally, validate that multiple steps produced same result as single-pass
148 TEST_MEMORY_COMPARE(output_a, length, output_b, length);
149 TEST_MEMORY_COMPARE(ctr_a, sizeof(ctr_a), ctr_b, sizeof(ctr_b));
150 TEST_MEMORY_COMPARE(stream_block_a, sizeof(stream_block_a),
151 stream_block_b, sizeof(stream_block_b));
152 TEST_EQUAL(nc_off_a, nc_off_b);
153
154exit:
155 mbedtls_free(input);
156 mbedtls_free(output_a);
157 mbedtls_free(output_b);
158
159 mbedtls_aes_free(&ctx);
160}
161/* END_CASE */
162
Yanray Wangb67b4742023-10-31 17:10:32 +0800163/* BEGIN_CASE depends_on:!MBEDTLS_BLOCK_CIPHER_NO_DECRYPT */
Gilles Peskine449bd832023-01-11 14:50:10 +0100164void aes_decrypt_ecb(data_t *key_str, data_t *src_str,
165 data_t *dst, int setkey_result)
Paul Bakker367dae42009-06-28 21:50:27 +0000166{
Paul Bakker367dae42009-06-28 21:50:27 +0000167 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200168 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000169
Paul Bakker367dae42009-06-28 21:50:27 +0000170 memset(output, 0x00, 100);
171
Gilles Peskine449bd832023-01-11 14:50:10 +0100172 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000173
Gilles Peskine449bd832023-01-11 14:50:10 +0100174 TEST_ASSERT(mbedtls_aes_setkey_dec(&ctx, key_str->x, key_str->len * 8) == setkey_result);
175 if (setkey_result == 0) {
176 TEST_ASSERT(mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_DECRYPT, src_str->x, output) == 0);
Paul Bakker367dae42009-06-28 21:50:27 +0000177
Gilles Peskine449bd832023-01-11 14:50:10 +0100178 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
Paul Bakker2b222c82009-07-27 21:03:45 +0000179 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200180
Paul Bakkerbd51b262014-07-10 15:26:12 +0200181exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100182 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000183}
Paul Bakker33b43f12013-08-20 11:48:36 +0200184/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000185
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200186/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine449bd832023-01-11 14:50:10 +0100187void aes_encrypt_cbc(data_t *key_str, data_t *iv_str,
188 data_t *src_str, data_t *dst,
189 int cbc_result)
Paul Bakker367dae42009-06-28 21:50:27 +0000190{
Paul Bakker367dae42009-06-28 21:50:27 +0000191 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200192 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000193
Paul Bakker367dae42009-06-28 21:50:27 +0000194 memset(output, 0x00, 100);
195
Gilles Peskine449bd832023-01-11 14:50:10 +0100196 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000197
Gilles Peskine449bd832023-01-11 14:50:10 +0100198 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
199 TEST_ASSERT(mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x,
200 src_str->x, output) == cbc_result);
201 if (cbc_result == 0) {
Paul Bakker367dae42009-06-28 21:50:27 +0000202
Gilles Peskine449bd832023-01-11 14:50:10 +0100203 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
204 src_str->len, dst->len) == 0);
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000205 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200206
Paul Bakkerbd51b262014-07-10 15:26:12 +0200207exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100208 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000209}
Paul Bakker33b43f12013-08-20 11:48:36 +0200210/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000211
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200212/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine449bd832023-01-11 14:50:10 +0100213void aes_decrypt_cbc(data_t *key_str, data_t *iv_str,
214 data_t *src_str, data_t *dst,
215 int cbc_result)
Paul Bakker367dae42009-06-28 21:50:27 +0000216{
Paul Bakker367dae42009-06-28 21:50:27 +0000217 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200218 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000219
Paul Bakker367dae42009-06-28 21:50:27 +0000220 memset(output, 0x00, 100);
Gilles Peskine449bd832023-01-11 14:50:10 +0100221 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000222
Gilles Peskine449bd832023-01-11 14:50:10 +0100223 TEST_ASSERT(mbedtls_aes_setkey_dec(&ctx, key_str->x, key_str->len * 8) == 0);
224 TEST_ASSERT(mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x,
225 src_str->x, output) == cbc_result);
226 if (cbc_result == 0) {
Paul Bakker367dae42009-06-28 21:50:27 +0000227
Gilles Peskine449bd832023-01-11 14:50:10 +0100228 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
229 src_str->len, dst->len) == 0);
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000230 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200231
Paul Bakkerbd51b262014-07-10 15:26:12 +0200232exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100233 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000234}
Paul Bakker33b43f12013-08-20 11:48:36 +0200235/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000236
Aorimn5f778012016-06-09 23:22:58 +0200237/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Gilles Peskine449bd832023-01-11 14:50:10 +0100238void aes_encrypt_xts(char *hex_key_string, char *hex_data_unit_string,
239 char *hex_src_string, char *hex_dst_string)
Aorimn5f778012016-06-09 23:22:58 +0200240{
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100241 enum { AES_BLOCK_SIZE = 16 };
242 unsigned char *data_unit = NULL;
243 unsigned char *key = NULL;
244 unsigned char *src = NULL;
245 unsigned char *dst = NULL;
246 unsigned char *output = NULL;
Jaeden Amero9366feb2018-05-29 18:55:17 +0100247 mbedtls_aes_xts_context ctx;
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100248 size_t key_len, src_len, dst_len, data_unit_len;
Aorimn5f778012016-06-09 23:22:58 +0200249
Gilles Peskine449bd832023-01-11 14:50:10 +0100250 mbedtls_aes_xts_init(&ctx);
Aorimn5f778012016-06-09 23:22:58 +0200251
Gilles Peskine449bd832023-01-11 14:50:10 +0100252 data_unit = mbedtls_test_unhexify_alloc(hex_data_unit_string,
253 &data_unit_len);
254 TEST_ASSERT(data_unit_len == AES_BLOCK_SIZE);
Aorimn5f778012016-06-09 23:22:58 +0200255
Gilles Peskine449bd832023-01-11 14:50:10 +0100256 key = mbedtls_test_unhexify_alloc(hex_key_string, &key_len);
257 TEST_ASSERT(key_len % 2 == 0);
Aorimn5f778012016-06-09 23:22:58 +0200258
Gilles Peskine449bd832023-01-11 14:50:10 +0100259 src = mbedtls_test_unhexify_alloc(hex_src_string, &src_len);
260 dst = mbedtls_test_unhexify_alloc(hex_dst_string, &dst_len);
261 TEST_ASSERT(src_len == dst_len);
Aorimn5f778012016-06-09 23:22:58 +0200262
Gilles Peskine449bd832023-01-11 14:50:10 +0100263 output = mbedtls_test_zero_alloc(dst_len);
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100264
Gilles Peskine449bd832023-01-11 14:50:10 +0100265 TEST_ASSERT(mbedtls_aes_xts_setkey_enc(&ctx, key, key_len * 8) == 0);
266 TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_ENCRYPT, src_len,
267 data_unit, src, output) == 0);
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100268
Gilles Peskine449bd832023-01-11 14:50:10 +0100269 TEST_ASSERT(memcmp(output, dst, dst_len) == 0);
Aorimn5f778012016-06-09 23:22:58 +0200270
271exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100272 mbedtls_aes_xts_free(&ctx);
273 mbedtls_free(data_unit);
274 mbedtls_free(key);
275 mbedtls_free(src);
276 mbedtls_free(dst);
277 mbedtls_free(output);
Aorimn5f778012016-06-09 23:22:58 +0200278}
279/* END_CASE */
280
281/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Gilles Peskine449bd832023-01-11 14:50:10 +0100282void aes_decrypt_xts(char *hex_key_string, char *hex_data_unit_string,
283 char *hex_dst_string, char *hex_src_string)
Aorimn5f778012016-06-09 23:22:58 +0200284{
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100285 enum { AES_BLOCK_SIZE = 16 };
286 unsigned char *data_unit = NULL;
287 unsigned char *key = NULL;
288 unsigned char *src = NULL;
289 unsigned char *dst = NULL;
290 unsigned char *output = NULL;
Jaeden Amero9366feb2018-05-29 18:55:17 +0100291 mbedtls_aes_xts_context ctx;
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100292 size_t key_len, src_len, dst_len, data_unit_len;
Aorimn5f778012016-06-09 23:22:58 +0200293
Gilles Peskine449bd832023-01-11 14:50:10 +0100294 mbedtls_aes_xts_init(&ctx);
Aorimn5f778012016-06-09 23:22:58 +0200295
Gilles Peskine449bd832023-01-11 14:50:10 +0100296 data_unit = mbedtls_test_unhexify_alloc(hex_data_unit_string,
297 &data_unit_len);
298 TEST_ASSERT(data_unit_len == AES_BLOCK_SIZE);
Aorimn5f778012016-06-09 23:22:58 +0200299
Gilles Peskine449bd832023-01-11 14:50:10 +0100300 key = mbedtls_test_unhexify_alloc(hex_key_string, &key_len);
301 TEST_ASSERT(key_len % 2 == 0);
Aorimn5f778012016-06-09 23:22:58 +0200302
Gilles Peskine449bd832023-01-11 14:50:10 +0100303 src = mbedtls_test_unhexify_alloc(hex_src_string, &src_len);
304 dst = mbedtls_test_unhexify_alloc(hex_dst_string, &dst_len);
305 TEST_ASSERT(src_len == dst_len);
Aorimn5f778012016-06-09 23:22:58 +0200306
Gilles Peskine449bd832023-01-11 14:50:10 +0100307 output = mbedtls_test_zero_alloc(dst_len);
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100308
Gilles Peskine449bd832023-01-11 14:50:10 +0100309 TEST_ASSERT(mbedtls_aes_xts_setkey_dec(&ctx, key, key_len * 8) == 0);
310 TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_DECRYPT, src_len,
311 data_unit, src, output) == 0);
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100312
Gilles Peskine449bd832023-01-11 14:50:10 +0100313 TEST_ASSERT(memcmp(output, dst, dst_len) == 0);
Aorimn5f778012016-06-09 23:22:58 +0200314
315exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100316 mbedtls_aes_xts_free(&ctx);
317 mbedtls_free(data_unit);
318 mbedtls_free(key);
319 mbedtls_free(src);
320 mbedtls_free(dst);
321 mbedtls_free(output);
Aorimn5f778012016-06-09 23:22:58 +0200322}
323/* END_CASE */
324
Jaeden Amero425382d2018-04-28 17:26:25 +0100325/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Gilles Peskine449bd832023-01-11 14:50:10 +0100326void aes_crypt_xts_size(int size, int retval)
Jaeden Amero425382d2018-04-28 17:26:25 +0100327{
328 mbedtls_aes_xts_context ctx;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500329 const unsigned char src[16] = { 0 };
330 unsigned char output[16];
Jaeden Amero425382d2018-04-28 17:26:25 +0100331 unsigned char data_unit[16];
332 size_t length = size;
333
Gilles Peskine449bd832023-01-11 14:50:10 +0100334 mbedtls_aes_xts_init(&ctx);
335 memset(data_unit, 0x00, sizeof(data_unit));
Jaeden Amero425382d2018-04-28 17:26:25 +0100336
Gilles Peskine449bd832023-01-11 14:50:10 +0100337 TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src,
338 output) == retval);
JoeSubbiani57face22021-06-17 15:00:01 +0100339exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100340 mbedtls_aes_xts_free(&ctx);
Jaeden Amero425382d2018-04-28 17:26:25 +0100341}
342/* END_CASE */
343
Jaeden Amero142383e2018-05-31 10:40:34 +0100344/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Gilles Peskine449bd832023-01-11 14:50:10 +0100345void aes_crypt_xts_keysize(int size, int retval)
Jaeden Amero142383e2018-05-31 10:40:34 +0100346{
347 mbedtls_aes_xts_context ctx;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500348 const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
Jaeden Amero142383e2018-05-31 10:40:34 +0100349 size_t key_len = size;
350
Gilles Peskine449bd832023-01-11 14:50:10 +0100351 mbedtls_aes_xts_init(&ctx);
Jaeden Amero142383e2018-05-31 10:40:34 +0100352
Gilles Peskine449bd832023-01-11 14:50:10 +0100353 TEST_ASSERT(mbedtls_aes_xts_setkey_enc(&ctx, key, key_len * 8) == retval);
354 TEST_ASSERT(mbedtls_aes_xts_setkey_dec(&ctx, key, key_len * 8) == retval);
Jaeden Amero142383e2018-05-31 10:40:34 +0100355exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100356 mbedtls_aes_xts_free(&ctx);
Jaeden Amero142383e2018-05-31 10:40:34 +0100357}
358/* END_CASE */
Jaeden Amero425382d2018-04-28 17:26:25 +0100359
360
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200361/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100362void aes_encrypt_cfb128(data_t *key_str, data_t *iv_str,
363 data_t *src_str, data_t *dst)
Paul Bakker367dae42009-06-28 21:50:27 +0000364{
Paul Bakker367dae42009-06-28 21:50:27 +0000365 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200366 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000367 size_t iv_offset = 0;
Paul Bakker367dae42009-06-28 21:50:27 +0000368
Paul Bakker367dae42009-06-28 21:50:27 +0000369 memset(output, 0x00, 100);
Gilles Peskine449bd832023-01-11 14:50:10 +0100370 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000371
Paul Bakker367dae42009-06-28 21:50:27 +0000372
Gilles Peskine449bd832023-01-11 14:50:10 +0100373 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
374 TEST_ASSERT(mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x,
375 src_str->x, output) == 0);
Paul Bakker367dae42009-06-28 21:50:27 +0000376
Gilles Peskine449bd832023-01-11 14:50:10 +0100377 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200378
Paul Bakkerbd51b262014-07-10 15:26:12 +0200379exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100380 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000381}
Paul Bakker33b43f12013-08-20 11:48:36 +0200382/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000383
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200384/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100385void aes_decrypt_cfb128(data_t *key_str, data_t *iv_str,
386 data_t *src_str, data_t *dst)
Paul Bakker367dae42009-06-28 21:50:27 +0000387{
Paul Bakker367dae42009-06-28 21:50:27 +0000388 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200389 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000390 size_t iv_offset = 0;
Paul Bakker367dae42009-06-28 21:50:27 +0000391
Paul Bakker367dae42009-06-28 21:50:27 +0000392 memset(output, 0x00, 100);
Gilles Peskine449bd832023-01-11 14:50:10 +0100393 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000394
Paul Bakker367dae42009-06-28 21:50:27 +0000395
Gilles Peskine449bd832023-01-11 14:50:10 +0100396 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
397 TEST_ASSERT(mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x,
398 src_str->x, output) == 0);
Paul Bakker367dae42009-06-28 21:50:27 +0000399
Gilles Peskine449bd832023-01-11 14:50:10 +0100400 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200401
Paul Bakkerbd51b262014-07-10 15:26:12 +0200402exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100403 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000404}
Paul Bakker33b43f12013-08-20 11:48:36 +0200405/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000406
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200407/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100408void aes_encrypt_cfb8(data_t *key_str, data_t *iv_str,
409 data_t *src_str, data_t *dst)
Paul Bakker556efba2014-01-24 15:38:12 +0100410{
Paul Bakker556efba2014-01-24 15:38:12 +0100411 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200412 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100413
Paul Bakker556efba2014-01-24 15:38:12 +0100414 memset(output, 0x00, 100);
Gilles Peskine449bd832023-01-11 14:50:10 +0100415 mbedtls_aes_init(&ctx);
Paul Bakker556efba2014-01-24 15:38:12 +0100416
Paul Bakker556efba2014-01-24 15:38:12 +0100417
Gilles Peskine449bd832023-01-11 14:50:10 +0100418 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
419 TEST_ASSERT(mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x,
420 src_str->x, output) == 0);
Paul Bakker556efba2014-01-24 15:38:12 +0100421
Gilles Peskine449bd832023-01-11 14:50:10 +0100422 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
423 src_str->len, dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200424
Paul Bakkerbd51b262014-07-10 15:26:12 +0200425exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100426 mbedtls_aes_free(&ctx);
Paul Bakker556efba2014-01-24 15:38:12 +0100427}
428/* END_CASE */
429
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200430/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100431void aes_decrypt_cfb8(data_t *key_str, data_t *iv_str,
432 data_t *src_str, data_t *dst)
Paul Bakker556efba2014-01-24 15:38:12 +0100433{
Paul Bakker556efba2014-01-24 15:38:12 +0100434 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200435 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100436
Paul Bakker556efba2014-01-24 15:38:12 +0100437 memset(output, 0x00, 100);
Gilles Peskine449bd832023-01-11 14:50:10 +0100438 mbedtls_aes_init(&ctx);
Paul Bakker556efba2014-01-24 15:38:12 +0100439
Paul Bakker556efba2014-01-24 15:38:12 +0100440
Gilles Peskine449bd832023-01-11 14:50:10 +0100441 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
442 TEST_ASSERT(mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x,
443 src_str->x, output) == 0);
Paul Bakker556efba2014-01-24 15:38:12 +0100444
Gilles Peskine449bd832023-01-11 14:50:10 +0100445 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
446 src_str->len, dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200447
Paul Bakkerbd51b262014-07-10 15:26:12 +0200448exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100449 mbedtls_aes_free(&ctx);
Paul Bakker556efba2014-01-24 15:38:12 +0100450}
451/* END_CASE */
452
Simon Butcher03018842018-04-22 22:57:58 +0100453/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_OFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100454void aes_encrypt_ofb(int fragment_size, data_t *key_str,
455 data_t *iv_str, data_t *src_str,
456 data_t *expected_output)
Simon Butcher03018842018-04-22 22:57:58 +0100457{
Simon Butchere416bf92018-06-02 18:28:32 +0100458 unsigned char output[32];
Simon Butcher03018842018-04-22 22:57:58 +0100459 mbedtls_aes_context ctx;
460 size_t iv_offset = 0;
461 int in_buffer_len;
Gilles Peskine449bd832023-01-11 14:50:10 +0100462 unsigned char *src_str_next;
Simon Butcher03018842018-04-22 22:57:58 +0100463
Gilles Peskine449bd832023-01-11 14:50:10 +0100464 memset(output, 0x00, sizeof(output));
465 mbedtls_aes_init(&ctx);
Simon Butcher03018842018-04-22 22:57:58 +0100466
Gilles Peskine449bd832023-01-11 14:50:10 +0100467 TEST_ASSERT((size_t) fragment_size < sizeof(output));
Simon Butchere416bf92018-06-02 18:28:32 +0100468
Gilles Peskine449bd832023-01-11 14:50:10 +0100469 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x,
470 key_str->len * 8) == 0);
Ronald Cron9ed40732020-06-25 09:03:34 +0200471 in_buffer_len = src_str->len;
472 src_str_next = src_str->x;
Simon Butcher03018842018-04-22 22:57:58 +0100473
Gilles Peskine449bd832023-01-11 14:50:10 +0100474 while (in_buffer_len > 0) {
475 TEST_ASSERT(mbedtls_aes_crypt_ofb(&ctx, fragment_size, &iv_offset,
476 iv_str->x, src_str_next, output) == 0);
Simon Butcher03018842018-04-22 22:57:58 +0100477
Gilles Peskine449bd832023-01-11 14:50:10 +0100478 TEST_ASSERT(memcmp(output, expected_output->x, fragment_size) == 0);
Simon Butcher03018842018-04-22 22:57:58 +0100479
480 in_buffer_len -= fragment_size;
Ronald Cron55d97f22020-06-26 17:00:30 +0200481 expected_output->x += fragment_size;
Simon Butcher03018842018-04-22 22:57:58 +0100482 src_str_next += fragment_size;
483
Gilles Peskine449bd832023-01-11 14:50:10 +0100484 if (in_buffer_len < fragment_size) {
Simon Butcher03018842018-04-22 22:57:58 +0100485 fragment_size = in_buffer_len;
Gilles Peskine449bd832023-01-11 14:50:10 +0100486 }
Simon Butcher03018842018-04-22 22:57:58 +0100487 }
488
489exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100490 mbedtls_aes_free(&ctx);
Simon Butcher03018842018-04-22 22:57:58 +0100491}
492/* END_CASE */
493
Tuvshinzaya Erdenekhuuc855bf52022-07-29 14:43:51 +0100494/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +0100495void aes_invalid_mode()
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500496{
497 mbedtls_aes_context aes_ctx;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500498 const unsigned char in[16] = { 0 };
499 unsigned char out[16];
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500500 const int invalid_mode = 42;
501
Gilles Peskine449bd832023-01-11 14:50:10 +0100502 TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
503 mbedtls_aes_crypt_ecb(&aes_ctx, invalid_mode, in, out));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500504
505#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100506 TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
507 mbedtls_aes_crypt_cbc(&aes_ctx, invalid_mode, 16,
508 out, in, out));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500509#endif /* MBEDTLS_CIPHER_MODE_CBC */
510
511#if defined(MBEDTLS_CIPHER_MODE_XTS)
Ronald Cron875b5fb2021-05-21 08:50:00 +0200512 mbedtls_aes_xts_context xts_ctx;
513
Gilles Peskine449bd832023-01-11 14:50:10 +0100514 TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
515 mbedtls_aes_crypt_xts(&xts_ctx, invalid_mode, 16,
516 in, in, out));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500517#endif /* MBEDTLS_CIPHER_MODE_XTS */
518
519#if defined(MBEDTLS_CIPHER_MODE_CFB)
Ronald Cron875b5fb2021-05-21 08:50:00 +0200520 size_t size;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500521
Gilles Peskine449bd832023-01-11 14:50:10 +0100522 TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
523 mbedtls_aes_crypt_cfb128(&aes_ctx, invalid_mode, 16,
524 &size, out, in, out));
525 TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
526 mbedtls_aes_crypt_cfb8(&aes_ctx, invalid_mode, 16,
527 out, in, out));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500528#endif /* MBEDTLS_CIPHER_MODE_CFB */
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500529}
530/* END_CASE */
531
532/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +0100533void aes_misc_params()
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500534{
535#if defined(MBEDTLS_CIPHER_MODE_CBC) || \
536 defined(MBEDTLS_CIPHER_MODE_XTS) || \
537 defined(MBEDTLS_CIPHER_MODE_CFB) || \
538 defined(MBEDTLS_CIPHER_MODE_OFB)
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500539 const unsigned char in[16] = { 0 };
540 unsigned char out[16];
541#endif
Andrzej Kurek252283f2022-09-27 07:54:16 -0400542#if defined(MBEDTLS_CIPHER_MODE_CBC) || \
543 defined(MBEDTLS_CIPHER_MODE_CFB) || \
544 defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100545 mbedtls_aes_context aes_ctx;
Andrzej Kurek252283f2022-09-27 07:54:16 -0400546#endif
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500547#if defined(MBEDTLS_CIPHER_MODE_XTS)
548 mbedtls_aes_xts_context xts_ctx;
549#endif
550#if defined(MBEDTLS_CIPHER_MODE_CFB) || \
551 defined(MBEDTLS_CIPHER_MODE_OFB)
552 size_t size;
553#endif
554
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500555#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100556 TEST_ASSERT(mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT,
557 15,
558 out, in, out)
559 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
560 TEST_ASSERT(mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT,
561 17,
562 out, in, out)
563 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500564#endif
565
566#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100567 TEST_ASSERT(mbedtls_aes_crypt_xts(&xts_ctx, MBEDTLS_AES_ENCRYPT,
568 15,
569 in, in, out)
570 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
571 TEST_ASSERT(mbedtls_aes_crypt_xts(&xts_ctx, MBEDTLS_AES_ENCRYPT,
572 (1 << 24) + 1,
573 in, in, out)
574 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500575#endif
576
577#if defined(MBEDTLS_CIPHER_MODE_CFB)
578 size = 16;
Gilles Peskine449bd832023-01-11 14:50:10 +0100579 TEST_ASSERT(mbedtls_aes_crypt_cfb128(&aes_ctx, MBEDTLS_AES_ENCRYPT, 16,
580 &size, out, in, out)
581 == MBEDTLS_ERR_AES_BAD_INPUT_DATA);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500582#endif
583
584#if defined(MBEDTLS_CIPHER_MODE_OFB)
585 size = 16;
Gilles Peskine449bd832023-01-11 14:50:10 +0100586 TEST_ASSERT(mbedtls_aes_crypt_ofb(&aes_ctx, 16, &size, out, in, out)
587 == MBEDTLS_ERR_AES_BAD_INPUT_DATA);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500588#endif
TRodziewicz358e5882021-05-28 12:58:46 +0200589
590/*
591 * The following line needs to be added to make the code compilable
592 * when all the conditions above will be not define in a specific
593 * choice of features.
594 */
Gilles Peskine449bd832023-01-11 14:50:10 +0100595 TEST_ASSERT(1);
TRodziewicz358e5882021-05-28 12:58:46 +0200596/* TODO: It will be removed when the whole test will be reworked */
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500597}
598/* END_CASE */
599
Yanray Wangb67b4742023-10-31 17:10:32 +0800600/* BEGIN_CASE depends_on:!MBEDTLS_BLOCK_CIPHER_NO_DECRYPT */
Gilles Peskine5fcdf492023-03-16 14:38:29 +0100601void aes_ecb_copy_context(data_t *key)
Werner Lewisdd76ef32022-05-30 12:00:21 +0100602{
Gilles Peskine844f65d2023-03-16 14:54:48 +0100603 /* We test context copying multiple times, with different alignments
604 * of the original and of the copies. */
605
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100606 struct align0 {
607 mbedtls_aes_context ctx;
608 };
609 struct align0 *src0 = NULL;
610 struct align0 *enc0 = NULL;
611 struct align0 *dec0 = NULL;
Gilles Peskine844f65d2023-03-16 14:54:48 +0100612
613 struct align1 {
614 char bump;
615 mbedtls_aes_context ctx;
616 };
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100617 struct align1 *src1 = NULL;
618 struct align1 *enc1 = NULL;
619 struct align1 *dec1 = NULL;
Gilles Peskine844f65d2023-03-16 14:54:48 +0100620
621 /* All peak alignment */
Tom Cosgrove05b2a872023-07-21 11:31:13 +0100622 TEST_CALLOC(src0, 1);
623 TEST_CALLOC(enc0, 1);
624 TEST_CALLOC(dec0, 1);
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100625 if (!test_copy(key, &src0->ctx, &enc0->ctx, &dec0->ctx)) {
Gilles Peskine5fcdf492023-03-16 14:38:29 +0100626 goto exit;
627 }
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100628 mbedtls_free(src0);
629 src0 = NULL;
630 mbedtls_free(enc0);
631 enc0 = NULL;
632 mbedtls_free(dec0);
633 dec0 = NULL;
Gilles Peskine844f65d2023-03-16 14:54:48 +0100634
635 /* Original shifted */
Tom Cosgrove05b2a872023-07-21 11:31:13 +0100636 TEST_CALLOC(src1, 1);
637 TEST_CALLOC(enc0, 1);
638 TEST_CALLOC(dec0, 1);
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100639 if (!test_copy(key, &src1->ctx, &enc0->ctx, &dec0->ctx)) {
Gilles Peskine844f65d2023-03-16 14:54:48 +0100640 goto exit;
641 }
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100642 mbedtls_free(src1);
643 src1 = NULL;
644 mbedtls_free(enc0);
645 enc0 = NULL;
646 mbedtls_free(dec0);
647 dec0 = NULL;
Gilles Peskine844f65d2023-03-16 14:54:48 +0100648
649 /* Copies shifted */
Tom Cosgrove05b2a872023-07-21 11:31:13 +0100650 TEST_CALLOC(src0, 1);
651 TEST_CALLOC(enc1, 1);
652 TEST_CALLOC(dec1, 1);
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100653 if (!test_copy(key, &src0->ctx, &enc1->ctx, &dec1->ctx)) {
Gilles Peskine844f65d2023-03-16 14:54:48 +0100654 goto exit;
655 }
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100656 mbedtls_free(src0);
657 src0 = NULL;
658 mbedtls_free(enc1);
659 enc1 = NULL;
660 mbedtls_free(dec1);
661 dec1 = NULL;
Gilles Peskine844f65d2023-03-16 14:54:48 +0100662
663 /* Source and copies shifted */
Tom Cosgrove05b2a872023-07-21 11:31:13 +0100664 TEST_CALLOC(src1, 1);
665 TEST_CALLOC(enc1, 1);
666 TEST_CALLOC(dec1, 1);
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100667 if (!test_copy(key, &src1->ctx, &enc1->ctx, &dec1->ctx)) {
Gilles Peskine844f65d2023-03-16 14:54:48 +0100668 goto exit;
669 }
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100670 mbedtls_free(src1);
671 src1 = NULL;
672 mbedtls_free(enc1);
673 enc1 = NULL;
674 mbedtls_free(dec1);
675 dec1 = NULL;
Gilles Peskine844f65d2023-03-16 14:54:48 +0100676
677exit:
Gilles Peskine28e4dc12023-03-16 21:39:47 +0100678 mbedtls_free(src0);
679 mbedtls_free(enc0);
680 mbedtls_free(dec0);
681 mbedtls_free(src1);
682 mbedtls_free(enc1);
683 mbedtls_free(dec1);
Werner Lewisdd76ef32022-05-30 12:00:21 +0100684}
685/* END_CASE */
686
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200687/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Gilles Peskine449bd832023-01-11 14:50:10 +0100688void aes_selftest()
Paul Bakker3d360822009-07-05 11:29:38 +0000689{
Gilles Peskine449bd832023-01-11 14:50:10 +0100690 TEST_ASSERT(mbedtls_aes_self_test(1) == 0);
Paul Bakker3d360822009-07-05 11:29:38 +0000691}
Paul Bakker33b43f12013-08-20 11:48:36 +0200692/* END_CASE */