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