1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */ 2*62c56f98SSadaf Ebrahimi#include "mbedtls/aria.h" 3*62c56f98SSadaf Ebrahimi 4*62c56f98SSadaf Ebrahimi/* Maximum size of data used by test vectors 5*62c56f98SSadaf Ebrahimi * WARNING: to be adapted if and when adding larger test cases */ 6*62c56f98SSadaf Ebrahimi#define ARIA_MAX_DATASIZE 160 7*62c56f98SSadaf Ebrahimi 8*62c56f98SSadaf Ebrahimi/* Maximum sizes of hexified things */ 9*62c56f98SSadaf Ebrahimi#define ARIA_MAX_KEY_STR (2 * MBEDTLS_ARIA_MAX_KEYSIZE + 1) 10*62c56f98SSadaf Ebrahimi#define ARIA_BLOCK_STR (2 * MBEDTLS_ARIA_BLOCKSIZE + 1) 11*62c56f98SSadaf Ebrahimi#define ARIA_MAX_DATA_STR (2 * ARIA_MAX_DATASIZE + 1) 12*62c56f98SSadaf Ebrahimi/* END_HEADER */ 13*62c56f98SSadaf Ebrahimi 14*62c56f98SSadaf Ebrahimi/* BEGIN_DEPENDENCIES 15*62c56f98SSadaf Ebrahimi * depends_on:MBEDTLS_ARIA_C 16*62c56f98SSadaf Ebrahimi * END_DEPENDENCIES 17*62c56f98SSadaf Ebrahimi */ 18*62c56f98SSadaf Ebrahimi 19*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:NOT_DEFINED */ 20*62c56f98SSadaf Ebrahimivoid aria_invalid_param() 21*62c56f98SSadaf Ebrahimi{ 22*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 23*62c56f98SSadaf Ebrahimi unsigned char input[MBEDTLS_ARIA_BLOCKSIZE] = { 0 }; 24*62c56f98SSadaf Ebrahimi unsigned char output[MBEDTLS_ARIA_BLOCKSIZE] = { 0 }; 25*62c56f98SSadaf Ebrahimi unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE] = { 0 }; 26*62c56f98SSadaf Ebrahimi size_t iv_off = 0; 27*62c56f98SSadaf Ebrahimi 28*62c56f98SSadaf Ebrahimi ((void) iv_off); 29*62c56f98SSadaf Ebrahimi ((void) iv); 30*62c56f98SSadaf Ebrahimi ((void) ctx); 31*62c56f98SSadaf Ebrahimi ((void) input); 32*62c56f98SSadaf Ebrahimi ((void) output); 33*62c56f98SSadaf Ebrahimi 34*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CBC) 35*62c56f98SSadaf Ebrahimi TEST_EQUAL(MBEDTLS_ERR_ARIA_BAD_INPUT_DATA, 36*62c56f98SSadaf Ebrahimi mbedtls_aria_crypt_cbc(&ctx, 37*62c56f98SSadaf Ebrahimi 42 /* invalid mode */, 38*62c56f98SSadaf Ebrahimi sizeof(input), 39*62c56f98SSadaf Ebrahimi iv, 40*62c56f98SSadaf Ebrahimi input, 41*62c56f98SSadaf Ebrahimi output)); 42*62c56f98SSadaf Ebrahimi#endif /* MBEDTLS_CIPHER_MODE_CBC */ 43*62c56f98SSadaf Ebrahimi 44*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_MODE_CFB) 45*62c56f98SSadaf Ebrahimi TEST_EQUAL(MBEDTLS_ERR_ARIA_BAD_INPUT_DATA, 46*62c56f98SSadaf Ebrahimi mbedtls_aria_crypt_cfb128(&ctx, 47*62c56f98SSadaf Ebrahimi 42, /* invalid mode */ 48*62c56f98SSadaf Ebrahimi sizeof(input), 49*62c56f98SSadaf Ebrahimi &iv_off, 50*62c56f98SSadaf Ebrahimi iv, 51*62c56f98SSadaf Ebrahimi input, 52*62c56f98SSadaf Ebrahimi output)); 53*62c56f98SSadaf Ebrahimi#endif /* MBEDTLS_CIPHER_MODE_CFB */ 54*62c56f98SSadaf Ebrahimi 55*62c56f98SSadaf Ebrahimiexit: 56*62c56f98SSadaf Ebrahimi return; 57*62c56f98SSadaf Ebrahimi 58*62c56f98SSadaf Ebrahimi} 59*62c56f98SSadaf Ebrahimi/* END_CASE */ 60*62c56f98SSadaf Ebrahimi 61*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */ 62*62c56f98SSadaf Ebrahimivoid aria_encrypt_ecb(data_t *key_str, data_t *src_str, 63*62c56f98SSadaf Ebrahimi data_t *expected_output, int setkey_result) 64*62c56f98SSadaf Ebrahimi{ 65*62c56f98SSadaf Ebrahimi unsigned char output[ARIA_MAX_DATASIZE]; 66*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 67*62c56f98SSadaf Ebrahimi size_t i; 68*62c56f98SSadaf Ebrahimi 69*62c56f98SSadaf Ebrahimi memset(output, 0x00, sizeof(output)); 70*62c56f98SSadaf Ebrahimi mbedtls_aria_init(&ctx); 71*62c56f98SSadaf Ebrahimi 72*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8) 73*62c56f98SSadaf Ebrahimi == setkey_result); 74*62c56f98SSadaf Ebrahimi if (setkey_result == 0) { 75*62c56f98SSadaf Ebrahimi for (i = 0; i < src_str->len; i += MBEDTLS_ARIA_BLOCKSIZE) { 76*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_crypt_ecb(&ctx, src_str->x + i, 77*62c56f98SSadaf Ebrahimi output + i) == 0); 78*62c56f98SSadaf Ebrahimi } 79*62c56f98SSadaf Ebrahimi 80*62c56f98SSadaf Ebrahimi TEST_MEMORY_COMPARE(output, expected_output->len, 81*62c56f98SSadaf Ebrahimi expected_output->x, expected_output->len); 82*62c56f98SSadaf Ebrahimi } 83*62c56f98SSadaf Ebrahimi 84*62c56f98SSadaf Ebrahimiexit: 85*62c56f98SSadaf Ebrahimi mbedtls_aria_free(&ctx); 86*62c56f98SSadaf Ebrahimi} 87*62c56f98SSadaf Ebrahimi/* END_CASE */ 88*62c56f98SSadaf Ebrahimi 89*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */ 90*62c56f98SSadaf Ebrahimivoid aria_decrypt_ecb(data_t *key_str, data_t *src_str, 91*62c56f98SSadaf Ebrahimi data_t *expected_output, int setkey_result) 92*62c56f98SSadaf Ebrahimi{ 93*62c56f98SSadaf Ebrahimi unsigned char output[ARIA_MAX_DATASIZE]; 94*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 95*62c56f98SSadaf Ebrahimi size_t i; 96*62c56f98SSadaf Ebrahimi 97*62c56f98SSadaf Ebrahimi memset(output, 0x00, sizeof(output)); 98*62c56f98SSadaf Ebrahimi mbedtls_aria_init(&ctx); 99*62c56f98SSadaf Ebrahimi 100*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_setkey_dec(&ctx, key_str->x, key_str->len * 8) 101*62c56f98SSadaf Ebrahimi == setkey_result); 102*62c56f98SSadaf Ebrahimi if (setkey_result == 0) { 103*62c56f98SSadaf Ebrahimi for (i = 0; i < src_str->len; i += MBEDTLS_ARIA_BLOCKSIZE) { 104*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_crypt_ecb(&ctx, src_str->x + i, 105*62c56f98SSadaf Ebrahimi output + i) == 0); 106*62c56f98SSadaf Ebrahimi } 107*62c56f98SSadaf Ebrahimi 108*62c56f98SSadaf Ebrahimi TEST_MEMORY_COMPARE(output, expected_output->len, 109*62c56f98SSadaf Ebrahimi expected_output->x, expected_output->len); 110*62c56f98SSadaf Ebrahimi } 111*62c56f98SSadaf Ebrahimi 112*62c56f98SSadaf Ebrahimiexit: 113*62c56f98SSadaf Ebrahimi mbedtls_aria_free(&ctx); 114*62c56f98SSadaf Ebrahimi} 115*62c56f98SSadaf Ebrahimi/* END_CASE */ 116*62c56f98SSadaf Ebrahimi 117*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */ 118*62c56f98SSadaf Ebrahimivoid aria_encrypt_cbc(data_t *key_str, data_t *iv_str, 119*62c56f98SSadaf Ebrahimi data_t *src_str, data_t *expected_output, 120*62c56f98SSadaf Ebrahimi int cbc_result) 121*62c56f98SSadaf Ebrahimi{ 122*62c56f98SSadaf Ebrahimi unsigned char output[ARIA_MAX_DATASIZE]; 123*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 124*62c56f98SSadaf Ebrahimi 125*62c56f98SSadaf Ebrahimi memset(output, 0x00, sizeof(output)); 126*62c56f98SSadaf Ebrahimi mbedtls_aria_init(&ctx); 127*62c56f98SSadaf Ebrahimi 128*62c56f98SSadaf Ebrahimi mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8); 129*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_crypt_cbc(&ctx, MBEDTLS_ARIA_ENCRYPT, 130*62c56f98SSadaf Ebrahimi src_str->len, iv_str->x, src_str->x, 131*62c56f98SSadaf Ebrahimi output) == cbc_result); 132*62c56f98SSadaf Ebrahimi if (cbc_result == 0) { 133*62c56f98SSadaf Ebrahimi TEST_MEMORY_COMPARE(output, expected_output->len, 134*62c56f98SSadaf Ebrahimi expected_output->x, expected_output->len); 135*62c56f98SSadaf Ebrahimi } 136*62c56f98SSadaf Ebrahimi 137*62c56f98SSadaf Ebrahimiexit: 138*62c56f98SSadaf Ebrahimi mbedtls_aria_free(&ctx); 139*62c56f98SSadaf Ebrahimi} 140*62c56f98SSadaf Ebrahimi/* END_CASE */ 141*62c56f98SSadaf Ebrahimi 142*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */ 143*62c56f98SSadaf Ebrahimivoid aria_decrypt_cbc(data_t *key_str, data_t *iv_str, 144*62c56f98SSadaf Ebrahimi data_t *src_str, data_t *expected_output, 145*62c56f98SSadaf Ebrahimi int cbc_result) 146*62c56f98SSadaf Ebrahimi{ 147*62c56f98SSadaf Ebrahimi unsigned char output[ARIA_MAX_DATASIZE]; 148*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 149*62c56f98SSadaf Ebrahimi 150*62c56f98SSadaf Ebrahimi memset(output, 0x00, sizeof(output)); 151*62c56f98SSadaf Ebrahimi mbedtls_aria_init(&ctx); 152*62c56f98SSadaf Ebrahimi 153*62c56f98SSadaf Ebrahimi mbedtls_aria_setkey_dec(&ctx, key_str->x, key_str->len * 8); 154*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_crypt_cbc(&ctx, MBEDTLS_ARIA_DECRYPT, 155*62c56f98SSadaf Ebrahimi src_str->len, iv_str->x, src_str->x, 156*62c56f98SSadaf Ebrahimi output) == cbc_result); 157*62c56f98SSadaf Ebrahimi if (cbc_result == 0) { 158*62c56f98SSadaf Ebrahimi TEST_MEMORY_COMPARE(output, expected_output->len, 159*62c56f98SSadaf Ebrahimi expected_output->x, expected_output->len); 160*62c56f98SSadaf Ebrahimi } 161*62c56f98SSadaf Ebrahimi 162*62c56f98SSadaf Ebrahimiexit: 163*62c56f98SSadaf Ebrahimi mbedtls_aria_free(&ctx); 164*62c56f98SSadaf Ebrahimi} 165*62c56f98SSadaf Ebrahimi/* END_CASE */ 166*62c56f98SSadaf Ebrahimi 167*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */ 168*62c56f98SSadaf Ebrahimivoid aria_encrypt_cfb128(data_t *key_str, data_t *iv_str, 169*62c56f98SSadaf Ebrahimi data_t *src_str, data_t *expected_output, 170*62c56f98SSadaf Ebrahimi int result) 171*62c56f98SSadaf Ebrahimi{ 172*62c56f98SSadaf Ebrahimi unsigned char output[ARIA_MAX_DATASIZE]; 173*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 174*62c56f98SSadaf Ebrahimi size_t iv_offset = 0; 175*62c56f98SSadaf Ebrahimi 176*62c56f98SSadaf Ebrahimi memset(output, 0x00, sizeof(output)); 177*62c56f98SSadaf Ebrahimi mbedtls_aria_init(&ctx); 178*62c56f98SSadaf Ebrahimi 179*62c56f98SSadaf Ebrahimi mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8); 180*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_crypt_cfb128(&ctx, MBEDTLS_ARIA_ENCRYPT, 181*62c56f98SSadaf Ebrahimi src_str->len, &iv_offset, 182*62c56f98SSadaf Ebrahimi iv_str->x, src_str->x, output) 183*62c56f98SSadaf Ebrahimi == result); 184*62c56f98SSadaf Ebrahimi 185*62c56f98SSadaf Ebrahimi TEST_MEMORY_COMPARE(output, expected_output->len, 186*62c56f98SSadaf Ebrahimi expected_output->x, expected_output->len); 187*62c56f98SSadaf Ebrahimi 188*62c56f98SSadaf Ebrahimiexit: 189*62c56f98SSadaf Ebrahimi mbedtls_aria_free(&ctx); 190*62c56f98SSadaf Ebrahimi} 191*62c56f98SSadaf Ebrahimi/* END_CASE */ 192*62c56f98SSadaf Ebrahimi 193*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */ 194*62c56f98SSadaf Ebrahimivoid aria_decrypt_cfb128(data_t *key_str, data_t *iv_str, 195*62c56f98SSadaf Ebrahimi data_t *src_str, data_t *expected_output, 196*62c56f98SSadaf Ebrahimi int result) 197*62c56f98SSadaf Ebrahimi{ 198*62c56f98SSadaf Ebrahimi unsigned char output[ARIA_MAX_DATASIZE]; 199*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 200*62c56f98SSadaf Ebrahimi size_t iv_offset = 0; 201*62c56f98SSadaf Ebrahimi 202*62c56f98SSadaf Ebrahimi memset(output, 0x00, sizeof(output)); 203*62c56f98SSadaf Ebrahimi mbedtls_aria_init(&ctx); 204*62c56f98SSadaf Ebrahimi 205*62c56f98SSadaf Ebrahimi mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8); 206*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_crypt_cfb128(&ctx, MBEDTLS_ARIA_DECRYPT, 207*62c56f98SSadaf Ebrahimi src_str->len, &iv_offset, 208*62c56f98SSadaf Ebrahimi iv_str->x, src_str->x, output) 209*62c56f98SSadaf Ebrahimi == result); 210*62c56f98SSadaf Ebrahimi 211*62c56f98SSadaf Ebrahimi TEST_MEMORY_COMPARE(output, expected_output->len, 212*62c56f98SSadaf Ebrahimi expected_output->x, expected_output->len); 213*62c56f98SSadaf Ebrahimi 214*62c56f98SSadaf Ebrahimiexit: 215*62c56f98SSadaf Ebrahimi mbedtls_aria_free(&ctx); 216*62c56f98SSadaf Ebrahimi} 217*62c56f98SSadaf Ebrahimi/* END_CASE */ 218*62c56f98SSadaf Ebrahimi 219*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */ 220*62c56f98SSadaf Ebrahimivoid aria_encrypt_ctr(data_t *key_str, data_t *iv_str, 221*62c56f98SSadaf Ebrahimi data_t *src_str, data_t *expected_output, 222*62c56f98SSadaf Ebrahimi int result) 223*62c56f98SSadaf Ebrahimi{ 224*62c56f98SSadaf Ebrahimi unsigned char output[ARIA_MAX_DATASIZE]; 225*62c56f98SSadaf Ebrahimi unsigned char blk[MBEDTLS_ARIA_BLOCKSIZE]; 226*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 227*62c56f98SSadaf Ebrahimi size_t iv_offset = 0; 228*62c56f98SSadaf Ebrahimi 229*62c56f98SSadaf Ebrahimi memset(output, 0x00, sizeof(output)); 230*62c56f98SSadaf Ebrahimi mbedtls_aria_init(&ctx); 231*62c56f98SSadaf Ebrahimi 232*62c56f98SSadaf Ebrahimi mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8); 233*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_crypt_ctr(&ctx, src_str->len, &iv_offset, 234*62c56f98SSadaf Ebrahimi iv_str->x, blk, src_str->x, output) 235*62c56f98SSadaf Ebrahimi == result); 236*62c56f98SSadaf Ebrahimi 237*62c56f98SSadaf Ebrahimi TEST_MEMORY_COMPARE(output, expected_output->len, 238*62c56f98SSadaf Ebrahimi expected_output->x, expected_output->len); 239*62c56f98SSadaf Ebrahimi 240*62c56f98SSadaf Ebrahimiexit: 241*62c56f98SSadaf Ebrahimi mbedtls_aria_free(&ctx); 242*62c56f98SSadaf Ebrahimi} 243*62c56f98SSadaf Ebrahimi/* END_CASE */ 244*62c56f98SSadaf Ebrahimi 245*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */ 246*62c56f98SSadaf Ebrahimivoid aria_decrypt_ctr(data_t *key_str, data_t *iv_str, 247*62c56f98SSadaf Ebrahimi data_t *src_str, data_t *expected_output, 248*62c56f98SSadaf Ebrahimi int result) 249*62c56f98SSadaf Ebrahimi{ 250*62c56f98SSadaf Ebrahimi unsigned char output[ARIA_MAX_DATASIZE]; 251*62c56f98SSadaf Ebrahimi unsigned char blk[MBEDTLS_ARIA_BLOCKSIZE]; 252*62c56f98SSadaf Ebrahimi mbedtls_aria_context ctx; 253*62c56f98SSadaf Ebrahimi size_t iv_offset = 0; 254*62c56f98SSadaf Ebrahimi 255*62c56f98SSadaf Ebrahimi memset(output, 0x00, sizeof(output)); 256*62c56f98SSadaf Ebrahimi mbedtls_aria_init(&ctx); 257*62c56f98SSadaf Ebrahimi 258*62c56f98SSadaf Ebrahimi mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8); 259*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_crypt_ctr(&ctx, src_str->len, &iv_offset, 260*62c56f98SSadaf Ebrahimi iv_str->x, blk, src_str->x, output) 261*62c56f98SSadaf Ebrahimi == result); 262*62c56f98SSadaf Ebrahimi 263*62c56f98SSadaf Ebrahimi TEST_MEMORY_COMPARE(output, expected_output->len, 264*62c56f98SSadaf Ebrahimi expected_output->x, expected_output->len); 265*62c56f98SSadaf Ebrahimi 266*62c56f98SSadaf Ebrahimiexit: 267*62c56f98SSadaf Ebrahimi mbedtls_aria_free(&ctx); 268*62c56f98SSadaf Ebrahimi} 269*62c56f98SSadaf Ebrahimi/* END_CASE */ 270*62c56f98SSadaf Ebrahimi 271*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ 272*62c56f98SSadaf Ebrahimivoid aria_selftest() 273*62c56f98SSadaf Ebrahimi{ 274*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_aria_self_test(1) == 0); 275*62c56f98SSadaf Ebrahimi} 276*62c56f98SSadaf Ebrahimi/* END_CASE */ 277