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