xref: /aosp_15_r20/external/mbedtls/tests/suites/test_suite_aes.function (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */
2*62c56f98SSadaf Ebrahimi#include "mbedtls/aes.h"
3*62c56f98SSadaf Ebrahimi
4*62c56f98SSadaf Ebrahimi/* Test AES with a copied context.
5*62c56f98SSadaf Ebrahimi *
6*62c56f98SSadaf Ebrahimi * master, enc and dec must be AES context objects. They don't need to
7*62c56f98SSadaf Ebrahimi * be initialized, and are left freed.
8*62c56f98SSadaf Ebrahimi */
9*62c56f98SSadaf Ebrahimistatic int test_copy(const data_t *key,
10*62c56f98SSadaf Ebrahimi                     mbedtls_aes_context *master,
11*62c56f98SSadaf Ebrahimi                     mbedtls_aes_context *enc,
12*62c56f98SSadaf Ebrahimi                     mbedtls_aes_context *dec)
13*62c56f98SSadaf Ebrahimi{
14*62c56f98SSadaf Ebrahimi    unsigned char plaintext[16] = {
15*62c56f98SSadaf Ebrahimi        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
16*62c56f98SSadaf Ebrahimi        0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
17*62c56f98SSadaf Ebrahimi    };
18*62c56f98SSadaf Ebrahimi    unsigned char ciphertext[16];
19*62c56f98SSadaf Ebrahimi    unsigned char output[16];
20*62c56f98SSadaf Ebrahimi
21*62c56f98SSadaf Ebrahimi    // Set key and encrypt with original context
22*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(master);
23*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_enc(master, key->x,
24*62c56f98SSadaf Ebrahimi                                       key->len * 8) == 0);
25*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_ecb(master, MBEDTLS_AES_ENCRYPT,
26*62c56f98SSadaf Ebrahimi                                      plaintext, ciphertext) == 0);
27*62c56f98SSadaf Ebrahimi    *enc = *master;
28*62c56f98SSadaf Ebrahimi
29*62c56f98SSadaf Ebrahimi    // Set key for decryption with original context
30*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(master);
31*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_dec(master, key->x,
32*62c56f98SSadaf Ebrahimi                                       key->len * 8) == 0);
33*62c56f98SSadaf Ebrahimi    *dec = *master;
34*62c56f98SSadaf Ebrahimi
35*62c56f98SSadaf Ebrahimi    // Wipe the original context to make sure nothing from it is used
36*62c56f98SSadaf Ebrahimi    memset(master, 0, sizeof(*master));
37*62c56f98SSadaf Ebrahimi
38*62c56f98SSadaf Ebrahimi    // Encrypt with copied context
39*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_ecb(enc, MBEDTLS_AES_ENCRYPT,
40*62c56f98SSadaf Ebrahimi                                      plaintext, output) == 0);
41*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(ciphertext, 16, output, 16);
42*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(enc);
43*62c56f98SSadaf Ebrahimi
44*62c56f98SSadaf Ebrahimi    // Decrypt with copied context
45*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_ecb(dec, MBEDTLS_AES_DECRYPT,
46*62c56f98SSadaf Ebrahimi                                      ciphertext, output) == 0);
47*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(plaintext, 16, output, 16);
48*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(dec);
49*62c56f98SSadaf Ebrahimi
50*62c56f98SSadaf Ebrahimi    return 1;
51*62c56f98SSadaf Ebrahimi
52*62c56f98SSadaf Ebrahimiexit:
53*62c56f98SSadaf Ebrahimi    /* Bug: we may be leaving something unfreed. This is harmless
54*62c56f98SSadaf Ebrahimi     * in our built-in implementations, but might cause a memory leak
55*62c56f98SSadaf Ebrahimi     * with alternative implementations. */
56*62c56f98SSadaf Ebrahimi    return 0;
57*62c56f98SSadaf Ebrahimi}
58*62c56f98SSadaf Ebrahimi
59*62c56f98SSadaf Ebrahimi/* END_HEADER */
60*62c56f98SSadaf Ebrahimi
61*62c56f98SSadaf Ebrahimi/* BEGIN_DEPENDENCIES
62*62c56f98SSadaf Ebrahimi * depends_on:MBEDTLS_AES_C
63*62c56f98SSadaf Ebrahimi * END_DEPENDENCIES
64*62c56f98SSadaf Ebrahimi */
65*62c56f98SSadaf Ebrahimi
66*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
67*62c56f98SSadaf Ebrahimivoid aes_encrypt_ecb(data_t *key_str, data_t *src_str,
68*62c56f98SSadaf Ebrahimi                     data_t *dst, int setkey_result)
69*62c56f98SSadaf Ebrahimi{
70*62c56f98SSadaf Ebrahimi    unsigned char output[100];
71*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
72*62c56f98SSadaf Ebrahimi
73*62c56f98SSadaf Ebrahimi    memset(output, 0x00, 100);
74*62c56f98SSadaf Ebrahimi
75*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
76*62c56f98SSadaf Ebrahimi
77*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == setkey_result);
78*62c56f98SSadaf Ebrahimi    if (setkey_result == 0) {
79*62c56f98SSadaf Ebrahimi        TEST_ASSERT(mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output) == 0);
80*62c56f98SSadaf Ebrahimi
81*62c56f98SSadaf Ebrahimi        TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
82*62c56f98SSadaf Ebrahimi    }
83*62c56f98SSadaf Ebrahimi
84*62c56f98SSadaf Ebrahimiexit:
85*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
86*62c56f98SSadaf Ebrahimi}
87*62c56f98SSadaf Ebrahimi/* END_CASE */
88*62c56f98SSadaf Ebrahimi
89*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
90*62c56f98SSadaf Ebrahimivoid aes_decrypt_ecb(data_t *key_str, data_t *src_str,
91*62c56f98SSadaf Ebrahimi                     data_t *dst, int setkey_result)
92*62c56f98SSadaf Ebrahimi{
93*62c56f98SSadaf Ebrahimi    unsigned char output[100];
94*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
95*62c56f98SSadaf Ebrahimi
96*62c56f98SSadaf Ebrahimi    memset(output, 0x00, 100);
97*62c56f98SSadaf Ebrahimi
98*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
99*62c56f98SSadaf Ebrahimi
100*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_dec(&ctx, key_str->x, key_str->len * 8) == setkey_result);
101*62c56f98SSadaf Ebrahimi    if (setkey_result == 0) {
102*62c56f98SSadaf Ebrahimi        TEST_ASSERT(mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_DECRYPT, src_str->x, output) == 0);
103*62c56f98SSadaf Ebrahimi
104*62c56f98SSadaf Ebrahimi        TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
105*62c56f98SSadaf Ebrahimi    }
106*62c56f98SSadaf Ebrahimi
107*62c56f98SSadaf Ebrahimiexit:
108*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
109*62c56f98SSadaf Ebrahimi}
110*62c56f98SSadaf Ebrahimi/* END_CASE */
111*62c56f98SSadaf Ebrahimi
112*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
113*62c56f98SSadaf Ebrahimivoid aes_encrypt_cbc(data_t *key_str, data_t *iv_str,
114*62c56f98SSadaf Ebrahimi                     data_t *src_str, data_t *dst,
115*62c56f98SSadaf Ebrahimi                     int cbc_result)
116*62c56f98SSadaf Ebrahimi{
117*62c56f98SSadaf Ebrahimi    unsigned char output[100];
118*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
119*62c56f98SSadaf Ebrahimi
120*62c56f98SSadaf Ebrahimi    memset(output, 0x00, 100);
121*62c56f98SSadaf Ebrahimi
122*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
123*62c56f98SSadaf Ebrahimi
124*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
125*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x,
126*62c56f98SSadaf Ebrahimi                                      src_str->x, output) == cbc_result);
127*62c56f98SSadaf Ebrahimi    if (cbc_result == 0) {
128*62c56f98SSadaf Ebrahimi
129*62c56f98SSadaf Ebrahimi        TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
130*62c56f98SSadaf Ebrahimi                                        src_str->len, dst->len) == 0);
131*62c56f98SSadaf Ebrahimi    }
132*62c56f98SSadaf Ebrahimi
133*62c56f98SSadaf Ebrahimiexit:
134*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
135*62c56f98SSadaf Ebrahimi}
136*62c56f98SSadaf Ebrahimi/* END_CASE */
137*62c56f98SSadaf Ebrahimi
138*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
139*62c56f98SSadaf Ebrahimivoid aes_decrypt_cbc(data_t *key_str, data_t *iv_str,
140*62c56f98SSadaf Ebrahimi                     data_t *src_str, data_t *dst,
141*62c56f98SSadaf Ebrahimi                     int cbc_result)
142*62c56f98SSadaf Ebrahimi{
143*62c56f98SSadaf Ebrahimi    unsigned char output[100];
144*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
145*62c56f98SSadaf Ebrahimi
146*62c56f98SSadaf Ebrahimi    memset(output, 0x00, 100);
147*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
148*62c56f98SSadaf Ebrahimi
149*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_dec(&ctx, key_str->x, key_str->len * 8) == 0);
150*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x,
151*62c56f98SSadaf Ebrahimi                                      src_str->x, output) == cbc_result);
152*62c56f98SSadaf Ebrahimi    if (cbc_result == 0) {
153*62c56f98SSadaf Ebrahimi
154*62c56f98SSadaf Ebrahimi        TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
155*62c56f98SSadaf Ebrahimi                                        src_str->len, dst->len) == 0);
156*62c56f98SSadaf Ebrahimi    }
157*62c56f98SSadaf Ebrahimi
158*62c56f98SSadaf Ebrahimiexit:
159*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
160*62c56f98SSadaf Ebrahimi}
161*62c56f98SSadaf Ebrahimi/* END_CASE */
162*62c56f98SSadaf Ebrahimi
163*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
164*62c56f98SSadaf Ebrahimivoid aes_encrypt_xts(char *hex_key_string, char *hex_data_unit_string,
165*62c56f98SSadaf Ebrahimi                     char *hex_src_string, char *hex_dst_string)
166*62c56f98SSadaf Ebrahimi{
167*62c56f98SSadaf Ebrahimi    enum { AES_BLOCK_SIZE = 16 };
168*62c56f98SSadaf Ebrahimi    unsigned char *data_unit = NULL;
169*62c56f98SSadaf Ebrahimi    unsigned char *key = NULL;
170*62c56f98SSadaf Ebrahimi    unsigned char *src = NULL;
171*62c56f98SSadaf Ebrahimi    unsigned char *dst = NULL;
172*62c56f98SSadaf Ebrahimi    unsigned char *output = NULL;
173*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_context ctx;
174*62c56f98SSadaf Ebrahimi    size_t key_len, src_len, dst_len, data_unit_len;
175*62c56f98SSadaf Ebrahimi
176*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_init(&ctx);
177*62c56f98SSadaf Ebrahimi
178*62c56f98SSadaf Ebrahimi    data_unit = mbedtls_test_unhexify_alloc(hex_data_unit_string,
179*62c56f98SSadaf Ebrahimi                                            &data_unit_len);
180*62c56f98SSadaf Ebrahimi    TEST_ASSERT(data_unit_len == AES_BLOCK_SIZE);
181*62c56f98SSadaf Ebrahimi
182*62c56f98SSadaf Ebrahimi    key = mbedtls_test_unhexify_alloc(hex_key_string, &key_len);
183*62c56f98SSadaf Ebrahimi    TEST_ASSERT(key_len % 2 == 0);
184*62c56f98SSadaf Ebrahimi
185*62c56f98SSadaf Ebrahimi    src = mbedtls_test_unhexify_alloc(hex_src_string, &src_len);
186*62c56f98SSadaf Ebrahimi    dst = mbedtls_test_unhexify_alloc(hex_dst_string, &dst_len);
187*62c56f98SSadaf Ebrahimi    TEST_ASSERT(src_len == dst_len);
188*62c56f98SSadaf Ebrahimi
189*62c56f98SSadaf Ebrahimi    output = mbedtls_test_zero_alloc(dst_len);
190*62c56f98SSadaf Ebrahimi
191*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_xts_setkey_enc(&ctx, key, key_len * 8) == 0);
192*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_ENCRYPT, src_len,
193*62c56f98SSadaf Ebrahimi                                      data_unit, src, output) == 0);
194*62c56f98SSadaf Ebrahimi
195*62c56f98SSadaf Ebrahimi    TEST_ASSERT(memcmp(output, dst, dst_len) == 0);
196*62c56f98SSadaf Ebrahimi
197*62c56f98SSadaf Ebrahimiexit:
198*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_free(&ctx);
199*62c56f98SSadaf Ebrahimi    mbedtls_free(data_unit);
200*62c56f98SSadaf Ebrahimi    mbedtls_free(key);
201*62c56f98SSadaf Ebrahimi    mbedtls_free(src);
202*62c56f98SSadaf Ebrahimi    mbedtls_free(dst);
203*62c56f98SSadaf Ebrahimi    mbedtls_free(output);
204*62c56f98SSadaf Ebrahimi}
205*62c56f98SSadaf Ebrahimi/* END_CASE */
206*62c56f98SSadaf Ebrahimi
207*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
208*62c56f98SSadaf Ebrahimivoid aes_decrypt_xts(char *hex_key_string, char *hex_data_unit_string,
209*62c56f98SSadaf Ebrahimi                     char *hex_dst_string, char *hex_src_string)
210*62c56f98SSadaf Ebrahimi{
211*62c56f98SSadaf Ebrahimi    enum { AES_BLOCK_SIZE = 16 };
212*62c56f98SSadaf Ebrahimi    unsigned char *data_unit = NULL;
213*62c56f98SSadaf Ebrahimi    unsigned char *key = NULL;
214*62c56f98SSadaf Ebrahimi    unsigned char *src = NULL;
215*62c56f98SSadaf Ebrahimi    unsigned char *dst = NULL;
216*62c56f98SSadaf Ebrahimi    unsigned char *output = NULL;
217*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_context ctx;
218*62c56f98SSadaf Ebrahimi    size_t key_len, src_len, dst_len, data_unit_len;
219*62c56f98SSadaf Ebrahimi
220*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_init(&ctx);
221*62c56f98SSadaf Ebrahimi
222*62c56f98SSadaf Ebrahimi    data_unit = mbedtls_test_unhexify_alloc(hex_data_unit_string,
223*62c56f98SSadaf Ebrahimi                                            &data_unit_len);
224*62c56f98SSadaf Ebrahimi    TEST_ASSERT(data_unit_len == AES_BLOCK_SIZE);
225*62c56f98SSadaf Ebrahimi
226*62c56f98SSadaf Ebrahimi    key = mbedtls_test_unhexify_alloc(hex_key_string, &key_len);
227*62c56f98SSadaf Ebrahimi    TEST_ASSERT(key_len % 2 == 0);
228*62c56f98SSadaf Ebrahimi
229*62c56f98SSadaf Ebrahimi    src = mbedtls_test_unhexify_alloc(hex_src_string, &src_len);
230*62c56f98SSadaf Ebrahimi    dst = mbedtls_test_unhexify_alloc(hex_dst_string, &dst_len);
231*62c56f98SSadaf Ebrahimi    TEST_ASSERT(src_len == dst_len);
232*62c56f98SSadaf Ebrahimi
233*62c56f98SSadaf Ebrahimi    output = mbedtls_test_zero_alloc(dst_len);
234*62c56f98SSadaf Ebrahimi
235*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_xts_setkey_dec(&ctx, key, key_len * 8) == 0);
236*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_DECRYPT, src_len,
237*62c56f98SSadaf Ebrahimi                                      data_unit, src, output) == 0);
238*62c56f98SSadaf Ebrahimi
239*62c56f98SSadaf Ebrahimi    TEST_ASSERT(memcmp(output, dst, dst_len) == 0);
240*62c56f98SSadaf Ebrahimi
241*62c56f98SSadaf Ebrahimiexit:
242*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_free(&ctx);
243*62c56f98SSadaf Ebrahimi    mbedtls_free(data_unit);
244*62c56f98SSadaf Ebrahimi    mbedtls_free(key);
245*62c56f98SSadaf Ebrahimi    mbedtls_free(src);
246*62c56f98SSadaf Ebrahimi    mbedtls_free(dst);
247*62c56f98SSadaf Ebrahimi    mbedtls_free(output);
248*62c56f98SSadaf Ebrahimi}
249*62c56f98SSadaf Ebrahimi/* END_CASE */
250*62c56f98SSadaf Ebrahimi
251*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
252*62c56f98SSadaf Ebrahimivoid aes_crypt_xts_size(int size, int retval)
253*62c56f98SSadaf Ebrahimi{
254*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_context ctx;
255*62c56f98SSadaf Ebrahimi    const unsigned char src[16] = { 0 };
256*62c56f98SSadaf Ebrahimi    unsigned char output[16];
257*62c56f98SSadaf Ebrahimi    unsigned char data_unit[16];
258*62c56f98SSadaf Ebrahimi    size_t length = size;
259*62c56f98SSadaf Ebrahimi
260*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_init(&ctx);
261*62c56f98SSadaf Ebrahimi    memset(data_unit, 0x00, sizeof(data_unit));
262*62c56f98SSadaf Ebrahimi
263*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src,
264*62c56f98SSadaf Ebrahimi                                      output) == retval);
265*62c56f98SSadaf Ebrahimiexit:
266*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_free(&ctx);
267*62c56f98SSadaf Ebrahimi}
268*62c56f98SSadaf Ebrahimi/* END_CASE */
269*62c56f98SSadaf Ebrahimi
270*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
271*62c56f98SSadaf Ebrahimivoid aes_crypt_xts_keysize(int size, int retval)
272*62c56f98SSadaf Ebrahimi{
273*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_context ctx;
274*62c56f98SSadaf Ebrahimi    const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
275*62c56f98SSadaf Ebrahimi    size_t key_len = size;
276*62c56f98SSadaf Ebrahimi
277*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_init(&ctx);
278*62c56f98SSadaf Ebrahimi
279*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_xts_setkey_enc(&ctx, key, key_len * 8) == retval);
280*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_xts_setkey_dec(&ctx, key, key_len * 8) == retval);
281*62c56f98SSadaf Ebrahimiexit:
282*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_free(&ctx);
283*62c56f98SSadaf Ebrahimi}
284*62c56f98SSadaf Ebrahimi/* END_CASE */
285*62c56f98SSadaf Ebrahimi
286*62c56f98SSadaf Ebrahimi
287*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
288*62c56f98SSadaf Ebrahimivoid aes_encrypt_cfb128(data_t *key_str, data_t *iv_str,
289*62c56f98SSadaf Ebrahimi                        data_t *src_str, data_t *dst)
290*62c56f98SSadaf Ebrahimi{
291*62c56f98SSadaf Ebrahimi    unsigned char output[100];
292*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
293*62c56f98SSadaf Ebrahimi    size_t iv_offset = 0;
294*62c56f98SSadaf Ebrahimi
295*62c56f98SSadaf Ebrahimi    memset(output, 0x00, 100);
296*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
297*62c56f98SSadaf Ebrahimi
298*62c56f98SSadaf Ebrahimi
299*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
300*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x,
301*62c56f98SSadaf Ebrahimi                                         src_str->x, output) == 0);
302*62c56f98SSadaf Ebrahimi
303*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
304*62c56f98SSadaf Ebrahimi
305*62c56f98SSadaf Ebrahimiexit:
306*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
307*62c56f98SSadaf Ebrahimi}
308*62c56f98SSadaf Ebrahimi/* END_CASE */
309*62c56f98SSadaf Ebrahimi
310*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
311*62c56f98SSadaf Ebrahimivoid aes_decrypt_cfb128(data_t *key_str, data_t *iv_str,
312*62c56f98SSadaf Ebrahimi                        data_t *src_str, data_t *dst)
313*62c56f98SSadaf Ebrahimi{
314*62c56f98SSadaf Ebrahimi    unsigned char output[100];
315*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
316*62c56f98SSadaf Ebrahimi    size_t iv_offset = 0;
317*62c56f98SSadaf Ebrahimi
318*62c56f98SSadaf Ebrahimi    memset(output, 0x00, 100);
319*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
320*62c56f98SSadaf Ebrahimi
321*62c56f98SSadaf Ebrahimi
322*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
323*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x,
324*62c56f98SSadaf Ebrahimi                                         src_str->x, output) == 0);
325*62c56f98SSadaf Ebrahimi
326*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
327*62c56f98SSadaf Ebrahimi
328*62c56f98SSadaf Ebrahimiexit:
329*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
330*62c56f98SSadaf Ebrahimi}
331*62c56f98SSadaf Ebrahimi/* END_CASE */
332*62c56f98SSadaf Ebrahimi
333*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
334*62c56f98SSadaf Ebrahimivoid aes_encrypt_cfb8(data_t *key_str, data_t *iv_str,
335*62c56f98SSadaf Ebrahimi                      data_t *src_str, data_t *dst)
336*62c56f98SSadaf Ebrahimi{
337*62c56f98SSadaf Ebrahimi    unsigned char output[100];
338*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
339*62c56f98SSadaf Ebrahimi
340*62c56f98SSadaf Ebrahimi    memset(output, 0x00, 100);
341*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
342*62c56f98SSadaf Ebrahimi
343*62c56f98SSadaf Ebrahimi
344*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
345*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x,
346*62c56f98SSadaf Ebrahimi                                       src_str->x, output) == 0);
347*62c56f98SSadaf Ebrahimi
348*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
349*62c56f98SSadaf Ebrahimi                                    src_str->len, dst->len) == 0);
350*62c56f98SSadaf Ebrahimi
351*62c56f98SSadaf Ebrahimiexit:
352*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
353*62c56f98SSadaf Ebrahimi}
354*62c56f98SSadaf Ebrahimi/* END_CASE */
355*62c56f98SSadaf Ebrahimi
356*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
357*62c56f98SSadaf Ebrahimivoid aes_decrypt_cfb8(data_t *key_str, data_t *iv_str,
358*62c56f98SSadaf Ebrahimi                      data_t *src_str, data_t *dst)
359*62c56f98SSadaf Ebrahimi{
360*62c56f98SSadaf Ebrahimi    unsigned char output[100];
361*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
362*62c56f98SSadaf Ebrahimi
363*62c56f98SSadaf Ebrahimi    memset(output, 0x00, 100);
364*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
365*62c56f98SSadaf Ebrahimi
366*62c56f98SSadaf Ebrahimi
367*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
368*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x,
369*62c56f98SSadaf Ebrahimi                                       src_str->x, output) == 0);
370*62c56f98SSadaf Ebrahimi
371*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
372*62c56f98SSadaf Ebrahimi                                    src_str->len, dst->len) == 0);
373*62c56f98SSadaf Ebrahimi
374*62c56f98SSadaf Ebrahimiexit:
375*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
376*62c56f98SSadaf Ebrahimi}
377*62c56f98SSadaf Ebrahimi/* END_CASE */
378*62c56f98SSadaf Ebrahimi
379*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_OFB */
380*62c56f98SSadaf Ebrahimivoid aes_encrypt_ofb(int fragment_size, data_t *key_str,
381*62c56f98SSadaf Ebrahimi                     data_t *iv_str, data_t *src_str,
382*62c56f98SSadaf Ebrahimi                     data_t *expected_output)
383*62c56f98SSadaf Ebrahimi{
384*62c56f98SSadaf Ebrahimi    unsigned char output[32];
385*62c56f98SSadaf Ebrahimi    mbedtls_aes_context ctx;
386*62c56f98SSadaf Ebrahimi    size_t iv_offset = 0;
387*62c56f98SSadaf Ebrahimi    int in_buffer_len;
388*62c56f98SSadaf Ebrahimi    unsigned char *src_str_next;
389*62c56f98SSadaf Ebrahimi
390*62c56f98SSadaf Ebrahimi    memset(output, 0x00, sizeof(output));
391*62c56f98SSadaf Ebrahimi    mbedtls_aes_init(&ctx);
392*62c56f98SSadaf Ebrahimi
393*62c56f98SSadaf Ebrahimi    TEST_ASSERT((size_t) fragment_size < sizeof(output));
394*62c56f98SSadaf Ebrahimi
395*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x,
396*62c56f98SSadaf Ebrahimi                                       key_str->len * 8) == 0);
397*62c56f98SSadaf Ebrahimi    in_buffer_len = src_str->len;
398*62c56f98SSadaf Ebrahimi    src_str_next = src_str->x;
399*62c56f98SSadaf Ebrahimi
400*62c56f98SSadaf Ebrahimi    while (in_buffer_len > 0) {
401*62c56f98SSadaf Ebrahimi        TEST_ASSERT(mbedtls_aes_crypt_ofb(&ctx, fragment_size, &iv_offset,
402*62c56f98SSadaf Ebrahimi                                          iv_str->x, src_str_next, output) == 0);
403*62c56f98SSadaf Ebrahimi
404*62c56f98SSadaf Ebrahimi        TEST_ASSERT(memcmp(output, expected_output->x, fragment_size) == 0);
405*62c56f98SSadaf Ebrahimi
406*62c56f98SSadaf Ebrahimi        in_buffer_len -= fragment_size;
407*62c56f98SSadaf Ebrahimi        expected_output->x += fragment_size;
408*62c56f98SSadaf Ebrahimi        src_str_next += fragment_size;
409*62c56f98SSadaf Ebrahimi
410*62c56f98SSadaf Ebrahimi        if (in_buffer_len < fragment_size) {
411*62c56f98SSadaf Ebrahimi            fragment_size = in_buffer_len;
412*62c56f98SSadaf Ebrahimi        }
413*62c56f98SSadaf Ebrahimi    }
414*62c56f98SSadaf Ebrahimi
415*62c56f98SSadaf Ebrahimiexit:
416*62c56f98SSadaf Ebrahimi    mbedtls_aes_free(&ctx);
417*62c56f98SSadaf Ebrahimi}
418*62c56f98SSadaf Ebrahimi/* END_CASE */
419*62c56f98SSadaf Ebrahimi
420*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
421*62c56f98SSadaf Ebrahimivoid aes_invalid_mode()
422*62c56f98SSadaf Ebrahimi{
423*62c56f98SSadaf Ebrahimi    mbedtls_aes_context aes_ctx;
424*62c56f98SSadaf Ebrahimi    const unsigned char in[16] = { 0 };
425*62c56f98SSadaf Ebrahimi    unsigned char out[16];
426*62c56f98SSadaf Ebrahimi    const int invalid_mode = 42;
427*62c56f98SSadaf Ebrahimi
428*62c56f98SSadaf Ebrahimi    TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
429*62c56f98SSadaf Ebrahimi               mbedtls_aes_crypt_ecb(&aes_ctx, invalid_mode, in, out));
430*62c56f98SSadaf Ebrahimi
431*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CBC)
432*62c56f98SSadaf Ebrahimi    TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
433*62c56f98SSadaf Ebrahimi               mbedtls_aes_crypt_cbc(&aes_ctx, invalid_mode, 16,
434*62c56f98SSadaf Ebrahimi                                     out, in, out));
435*62c56f98SSadaf Ebrahimi#endif /* MBEDTLS_CIPHER_MODE_CBC */
436*62c56f98SSadaf Ebrahimi
437*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_XTS)
438*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_context xts_ctx;
439*62c56f98SSadaf Ebrahimi
440*62c56f98SSadaf Ebrahimi    TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
441*62c56f98SSadaf Ebrahimi               mbedtls_aes_crypt_xts(&xts_ctx, invalid_mode, 16,
442*62c56f98SSadaf Ebrahimi                                     in, in, out));
443*62c56f98SSadaf Ebrahimi#endif /* MBEDTLS_CIPHER_MODE_XTS */
444*62c56f98SSadaf Ebrahimi
445*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CFB)
446*62c56f98SSadaf Ebrahimi    size_t size;
447*62c56f98SSadaf Ebrahimi
448*62c56f98SSadaf Ebrahimi    TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
449*62c56f98SSadaf Ebrahimi               mbedtls_aes_crypt_cfb128(&aes_ctx, invalid_mode, 16,
450*62c56f98SSadaf Ebrahimi                                        &size, out, in, out));
451*62c56f98SSadaf Ebrahimi    TEST_EQUAL(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
452*62c56f98SSadaf Ebrahimi               mbedtls_aes_crypt_cfb8(&aes_ctx, invalid_mode, 16,
453*62c56f98SSadaf Ebrahimi                                      out, in, out));
454*62c56f98SSadaf Ebrahimi#endif /* MBEDTLS_CIPHER_MODE_CFB */
455*62c56f98SSadaf Ebrahimi}
456*62c56f98SSadaf Ebrahimi/* END_CASE */
457*62c56f98SSadaf Ebrahimi
458*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
459*62c56f98SSadaf Ebrahimivoid aes_misc_params()
460*62c56f98SSadaf Ebrahimi{
461*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CBC) || \
462*62c56f98SSadaf Ebrahimi    defined(MBEDTLS_CIPHER_MODE_XTS) || \
463*62c56f98SSadaf Ebrahimi    defined(MBEDTLS_CIPHER_MODE_CFB) || \
464*62c56f98SSadaf Ebrahimi    defined(MBEDTLS_CIPHER_MODE_OFB)
465*62c56f98SSadaf Ebrahimi    const unsigned char in[16] = { 0 };
466*62c56f98SSadaf Ebrahimi    unsigned char out[16];
467*62c56f98SSadaf Ebrahimi#endif
468*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CBC) || \
469*62c56f98SSadaf Ebrahimi    defined(MBEDTLS_CIPHER_MODE_CFB) || \
470*62c56f98SSadaf Ebrahimi    defined(MBEDTLS_CIPHER_MODE_OFB)
471*62c56f98SSadaf Ebrahimi    mbedtls_aes_context aes_ctx;
472*62c56f98SSadaf Ebrahimi#endif
473*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_XTS)
474*62c56f98SSadaf Ebrahimi    mbedtls_aes_xts_context xts_ctx;
475*62c56f98SSadaf Ebrahimi#endif
476*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CFB) || \
477*62c56f98SSadaf Ebrahimi    defined(MBEDTLS_CIPHER_MODE_OFB)
478*62c56f98SSadaf Ebrahimi    size_t size;
479*62c56f98SSadaf Ebrahimi#endif
480*62c56f98SSadaf Ebrahimi
481*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CBC)
482*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT,
483*62c56f98SSadaf Ebrahimi                                      15,
484*62c56f98SSadaf Ebrahimi                                      out, in, out)
485*62c56f98SSadaf Ebrahimi                == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
486*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT,
487*62c56f98SSadaf Ebrahimi                                      17,
488*62c56f98SSadaf Ebrahimi                                      out, in, out)
489*62c56f98SSadaf Ebrahimi                == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
490*62c56f98SSadaf Ebrahimi#endif
491*62c56f98SSadaf Ebrahimi
492*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_XTS)
493*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_xts(&xts_ctx, MBEDTLS_AES_ENCRYPT,
494*62c56f98SSadaf Ebrahimi                                      15,
495*62c56f98SSadaf Ebrahimi                                      in, in, out)
496*62c56f98SSadaf Ebrahimi                == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
497*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_xts(&xts_ctx, MBEDTLS_AES_ENCRYPT,
498*62c56f98SSadaf Ebrahimi                                      (1 << 24) + 1,
499*62c56f98SSadaf Ebrahimi                                      in, in, out)
500*62c56f98SSadaf Ebrahimi                == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
501*62c56f98SSadaf Ebrahimi#endif
502*62c56f98SSadaf Ebrahimi
503*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CFB)
504*62c56f98SSadaf Ebrahimi    size = 16;
505*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_cfb128(&aes_ctx, MBEDTLS_AES_ENCRYPT, 16,
506*62c56f98SSadaf Ebrahimi                                         &size, out, in, out)
507*62c56f98SSadaf Ebrahimi                == MBEDTLS_ERR_AES_BAD_INPUT_DATA);
508*62c56f98SSadaf Ebrahimi#endif
509*62c56f98SSadaf Ebrahimi
510*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_OFB)
511*62c56f98SSadaf Ebrahimi    size = 16;
512*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_crypt_ofb(&aes_ctx, 16, &size, out, in, out)
513*62c56f98SSadaf Ebrahimi                == MBEDTLS_ERR_AES_BAD_INPUT_DATA);
514*62c56f98SSadaf Ebrahimi#endif
515*62c56f98SSadaf Ebrahimi
516*62c56f98SSadaf Ebrahimi/*
517*62c56f98SSadaf Ebrahimi * The following line needs to be added to make the code compilable
518*62c56f98SSadaf Ebrahimi * when all the conditions above will be not define in a specific
519*62c56f98SSadaf Ebrahimi * choice of features.
520*62c56f98SSadaf Ebrahimi */
521*62c56f98SSadaf Ebrahimi    TEST_ASSERT(1);
522*62c56f98SSadaf Ebrahimi/* TODO: It will be removed when the whole test will be reworked */
523*62c56f98SSadaf Ebrahimi}
524*62c56f98SSadaf Ebrahimi/* END_CASE */
525*62c56f98SSadaf Ebrahimi
526*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
527*62c56f98SSadaf Ebrahimivoid aes_ecb_copy_context(data_t *key)
528*62c56f98SSadaf Ebrahimi{
529*62c56f98SSadaf Ebrahimi    /* We test context copying multiple times, with different alignments
530*62c56f98SSadaf Ebrahimi     * of the original and of the copies. */
531*62c56f98SSadaf Ebrahimi
532*62c56f98SSadaf Ebrahimi    struct align0 {
533*62c56f98SSadaf Ebrahimi        mbedtls_aes_context ctx;
534*62c56f98SSadaf Ebrahimi    };
535*62c56f98SSadaf Ebrahimi    struct align0 *src0 = NULL;
536*62c56f98SSadaf Ebrahimi    struct align0 *enc0 = NULL;
537*62c56f98SSadaf Ebrahimi    struct align0 *dec0 = NULL;
538*62c56f98SSadaf Ebrahimi
539*62c56f98SSadaf Ebrahimi    struct align1 {
540*62c56f98SSadaf Ebrahimi        char bump;
541*62c56f98SSadaf Ebrahimi        mbedtls_aes_context ctx;
542*62c56f98SSadaf Ebrahimi    };
543*62c56f98SSadaf Ebrahimi    struct align1 *src1 = NULL;
544*62c56f98SSadaf Ebrahimi    struct align1 *enc1 = NULL;
545*62c56f98SSadaf Ebrahimi    struct align1 *dec1 = NULL;
546*62c56f98SSadaf Ebrahimi
547*62c56f98SSadaf Ebrahimi    /* All peak alignment */
548*62c56f98SSadaf Ebrahimi    TEST_CALLOC(src0, 1);
549*62c56f98SSadaf Ebrahimi    TEST_CALLOC(enc0, 1);
550*62c56f98SSadaf Ebrahimi    TEST_CALLOC(dec0, 1);
551*62c56f98SSadaf Ebrahimi    if (!test_copy(key, &src0->ctx, &enc0->ctx, &dec0->ctx)) {
552*62c56f98SSadaf Ebrahimi        goto exit;
553*62c56f98SSadaf Ebrahimi    }
554*62c56f98SSadaf Ebrahimi    mbedtls_free(src0);
555*62c56f98SSadaf Ebrahimi    src0 = NULL;
556*62c56f98SSadaf Ebrahimi    mbedtls_free(enc0);
557*62c56f98SSadaf Ebrahimi    enc0 = NULL;
558*62c56f98SSadaf Ebrahimi    mbedtls_free(dec0);
559*62c56f98SSadaf Ebrahimi    dec0 = NULL;
560*62c56f98SSadaf Ebrahimi
561*62c56f98SSadaf Ebrahimi    /* Original shifted */
562*62c56f98SSadaf Ebrahimi    TEST_CALLOC(src1, 1);
563*62c56f98SSadaf Ebrahimi    TEST_CALLOC(enc0, 1);
564*62c56f98SSadaf Ebrahimi    TEST_CALLOC(dec0, 1);
565*62c56f98SSadaf Ebrahimi    if (!test_copy(key, &src1->ctx, &enc0->ctx, &dec0->ctx)) {
566*62c56f98SSadaf Ebrahimi        goto exit;
567*62c56f98SSadaf Ebrahimi    }
568*62c56f98SSadaf Ebrahimi    mbedtls_free(src1);
569*62c56f98SSadaf Ebrahimi    src1 = NULL;
570*62c56f98SSadaf Ebrahimi    mbedtls_free(enc0);
571*62c56f98SSadaf Ebrahimi    enc0 = NULL;
572*62c56f98SSadaf Ebrahimi    mbedtls_free(dec0);
573*62c56f98SSadaf Ebrahimi    dec0 = NULL;
574*62c56f98SSadaf Ebrahimi
575*62c56f98SSadaf Ebrahimi    /* Copies shifted */
576*62c56f98SSadaf Ebrahimi    TEST_CALLOC(src0, 1);
577*62c56f98SSadaf Ebrahimi    TEST_CALLOC(enc1, 1);
578*62c56f98SSadaf Ebrahimi    TEST_CALLOC(dec1, 1);
579*62c56f98SSadaf Ebrahimi    if (!test_copy(key, &src0->ctx, &enc1->ctx, &dec1->ctx)) {
580*62c56f98SSadaf Ebrahimi        goto exit;
581*62c56f98SSadaf Ebrahimi    }
582*62c56f98SSadaf Ebrahimi    mbedtls_free(src0);
583*62c56f98SSadaf Ebrahimi    src0 = NULL;
584*62c56f98SSadaf Ebrahimi    mbedtls_free(enc1);
585*62c56f98SSadaf Ebrahimi    enc1 = NULL;
586*62c56f98SSadaf Ebrahimi    mbedtls_free(dec1);
587*62c56f98SSadaf Ebrahimi    dec1 = NULL;
588*62c56f98SSadaf Ebrahimi
589*62c56f98SSadaf Ebrahimi    /* Source and copies shifted */
590*62c56f98SSadaf Ebrahimi    TEST_CALLOC(src1, 1);
591*62c56f98SSadaf Ebrahimi    TEST_CALLOC(enc1, 1);
592*62c56f98SSadaf Ebrahimi    TEST_CALLOC(dec1, 1);
593*62c56f98SSadaf Ebrahimi    if (!test_copy(key, &src1->ctx, &enc1->ctx, &dec1->ctx)) {
594*62c56f98SSadaf Ebrahimi        goto exit;
595*62c56f98SSadaf Ebrahimi    }
596*62c56f98SSadaf Ebrahimi    mbedtls_free(src1);
597*62c56f98SSadaf Ebrahimi    src1 = NULL;
598*62c56f98SSadaf Ebrahimi    mbedtls_free(enc1);
599*62c56f98SSadaf Ebrahimi    enc1 = NULL;
600*62c56f98SSadaf Ebrahimi    mbedtls_free(dec1);
601*62c56f98SSadaf Ebrahimi    dec1 = NULL;
602*62c56f98SSadaf Ebrahimi
603*62c56f98SSadaf Ebrahimiexit:
604*62c56f98SSadaf Ebrahimi    mbedtls_free(src0);
605*62c56f98SSadaf Ebrahimi    mbedtls_free(enc0);
606*62c56f98SSadaf Ebrahimi    mbedtls_free(dec0);
607*62c56f98SSadaf Ebrahimi    mbedtls_free(src1);
608*62c56f98SSadaf Ebrahimi    mbedtls_free(enc1);
609*62c56f98SSadaf Ebrahimi    mbedtls_free(dec1);
610*62c56f98SSadaf Ebrahimi}
611*62c56f98SSadaf Ebrahimi/* END_CASE */
612*62c56f98SSadaf Ebrahimi
613*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
614*62c56f98SSadaf Ebrahimivoid aes_selftest()
615*62c56f98SSadaf Ebrahimi{
616*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_aes_self_test(1) == 0);
617*62c56f98SSadaf Ebrahimi}
618*62c56f98SSadaf Ebrahimi/* END_CASE */
619