2 #include "mbedtls/aria.h"
4 /* Maxium size of data used by test vectors
5 * WARNING: to be adapted if and when adding larger test cases */
6 #define ARIA_MAX_DATASIZE 160
8 /* Maximum sizes of hexified things */
9 #define ARIA_MAX_KEY_STR ( 2 * MBEDTLS_ARIA_MAX_KEYSIZE + 1 )
10 #define ARIA_BLOCK_STR ( 2 * MBEDTLS_ARIA_BLOCKSIZE + 1 )
11 #define ARIA_MAX_DATA_STR ( 2 * ARIA_MAX_DATASIZE + 1 )
15 * depends_on:MBEDTLS_ARIA_C
20 void aria_valid_param( )
22 TEST_VALID_PARAM( mbedtls_aria_free( NULL ) );
26 /* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
27 void aria_invalid_param( )
29 mbedtls_aria_context ctx;
30 unsigned char key[128 / 8] = { 0 };
31 unsigned char input[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
32 unsigned char output[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
33 unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
39 TEST_INVALID_PARAM( mbedtls_aria_init( NULL ) );
41 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
42 mbedtls_aria_setkey_enc( NULL, key,
44 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
45 mbedtls_aria_setkey_enc( &ctx, NULL,
48 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
49 mbedtls_aria_setkey_dec( NULL, key,
51 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
52 mbedtls_aria_setkey_dec( &ctx, NULL,
55 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
56 mbedtls_aria_crypt_ecb( NULL, input, output ) );
57 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
58 mbedtls_aria_crypt_ecb( &ctx, NULL, output ) );
59 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
60 mbedtls_aria_crypt_ecb( &ctx, input, NULL ) );
62 #if defined(MBEDTLS_CIPHER_MODE_CBC)
63 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
64 mbedtls_aria_crypt_cbc( NULL,
70 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
71 mbedtls_aria_crypt_cbc( &ctx,
72 42 /* invalid mode */,
77 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
78 mbedtls_aria_crypt_cbc( &ctx,
84 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
85 mbedtls_aria_crypt_cbc( &ctx,
91 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
92 mbedtls_aria_crypt_cbc( &ctx,
98 #endif /* MBEDTLS_CIPHER_MODE_CBC */
100 #if defined(MBEDTLS_CIPHER_MODE_CFB)
101 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
102 mbedtls_aria_crypt_cfb128( NULL,
103 MBEDTLS_ARIA_ENCRYPT,
109 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
110 mbedtls_aria_crypt_cfb128( &ctx,
111 42, /* invalid mode */
117 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
118 mbedtls_aria_crypt_cfb128( &ctx,
119 MBEDTLS_ARIA_ENCRYPT,
125 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
126 mbedtls_aria_crypt_cfb128( &ctx,
127 MBEDTLS_ARIA_ENCRYPT,
133 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
134 mbedtls_aria_crypt_cfb128( &ctx,
135 MBEDTLS_ARIA_ENCRYPT,
141 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
142 mbedtls_aria_crypt_cfb128( &ctx,
143 MBEDTLS_ARIA_ENCRYPT,
149 #endif /* MBEDTLS_CIPHER_MODE_CFB */
151 #if defined(MBEDTLS_CIPHER_MODE_CTR)
152 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
153 mbedtls_aria_crypt_ctr( NULL,
160 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
161 mbedtls_aria_crypt_ctr( &ctx,
168 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
169 mbedtls_aria_crypt_ctr( &ctx,
176 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
177 mbedtls_aria_crypt_ctr( &ctx,
184 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
185 mbedtls_aria_crypt_ctr( &ctx,
192 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
193 mbedtls_aria_crypt_ctr( &ctx,
200 #endif /* MBEDTLS_CIPHER_MODE_CTR */
209 void aria_encrypt_ecb( char *hex_key_string, char *hex_src_string,
210 char *hex_dst_string, int setkey_result )
212 unsigned char key_str[ARIA_MAX_KEY_STR];
213 unsigned char src_str[ARIA_MAX_DATA_STR];
214 unsigned char dst_str[ARIA_MAX_DATA_STR];
215 unsigned char output[ARIA_MAX_DATASIZE];
216 mbedtls_aria_context ctx;
217 int key_len, data_len, i;
219 memset( key_str, 0x00, sizeof( key_str ) );
220 memset( src_str, 0x00, sizeof( src_str ) );
221 memset( dst_str, 0x00, sizeof( dst_str ) );
222 memset( output, 0x00, sizeof( output ) );
223 mbedtls_aria_init( &ctx );
225 key_len = unhexify( key_str, hex_key_string );
226 data_len = unhexify( src_str, hex_src_string );
228 TEST_ASSERT( mbedtls_aria_setkey_enc( &ctx, key_str, key_len * 8 )
230 if( setkey_result == 0 )
232 for( i = 0; i < data_len; i += MBEDTLS_ARIA_BLOCKSIZE )
234 TEST_ASSERT( mbedtls_aria_crypt_ecb( &ctx, src_str + i, output + i )
237 hexify( dst_str, output, data_len );
239 TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
243 mbedtls_aria_free( &ctx );
248 void aria_decrypt_ecb( char *hex_key_string, char *hex_src_string,
249 char *hex_dst_string, int setkey_result )
251 unsigned char key_str[ARIA_MAX_KEY_STR];
252 unsigned char src_str[ARIA_MAX_DATA_STR];
253 unsigned char dst_str[ARIA_MAX_DATA_STR];
254 unsigned char output[ARIA_MAX_DATASIZE];
255 mbedtls_aria_context ctx;
256 int key_len, data_len, i;
258 memset( key_str, 0x00, sizeof( key_str ) );
259 memset( src_str, 0x00, sizeof( src_str ) );
260 memset( dst_str, 0x00, sizeof( dst_str ) );
261 memset( output, 0x00, sizeof( output ) );
262 mbedtls_aria_init( &ctx );
264 key_len = unhexify( key_str, hex_key_string );
265 data_len = unhexify( src_str, hex_src_string );
267 TEST_ASSERT( mbedtls_aria_setkey_dec( &ctx, key_str, key_len * 8 )
269 if( setkey_result == 0 )
271 for( i = 0; i < data_len; i += MBEDTLS_ARIA_BLOCKSIZE )
273 TEST_ASSERT( mbedtls_aria_crypt_ecb( &ctx, src_str + i, output + i )
276 hexify( dst_str, output, data_len );
278 TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
282 mbedtls_aria_free( &ctx );
286 /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
287 void aria_encrypt_cbc( char *hex_key_string, char *hex_iv_string,
288 char *hex_src_string, char *hex_dst_string,
291 unsigned char key_str[ARIA_MAX_KEY_STR];
292 unsigned char iv_str[ARIA_BLOCK_STR];
293 unsigned char src_str[ARIA_MAX_DATA_STR];
294 unsigned char dst_str[ARIA_MAX_DATA_STR];
295 unsigned char output[ARIA_MAX_DATASIZE];
296 mbedtls_aria_context ctx;
297 int key_len, data_len;
299 memset( key_str, 0x00, sizeof( key_str ) );
300 memset( iv_str, 0x00, sizeof( iv_str ) );
301 memset( src_str, 0x00, sizeof( src_str ) );
302 memset( dst_str, 0x00, sizeof( dst_str ) );
303 memset( output, 0x00, sizeof( output ) );
304 mbedtls_aria_init( &ctx );
306 key_len = unhexify( key_str, hex_key_string );
307 unhexify( iv_str, hex_iv_string );
308 data_len = unhexify( src_str, hex_src_string );
310 mbedtls_aria_setkey_enc( &ctx, key_str, key_len * 8 );
311 TEST_ASSERT( mbedtls_aria_crypt_cbc( &ctx, MBEDTLS_ARIA_ENCRYPT, data_len,
312 iv_str, src_str, output )
314 if( cbc_result == 0 )
316 hexify( dst_str, output, data_len );
318 TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
322 mbedtls_aria_free( &ctx );
326 /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
327 void aria_decrypt_cbc( char *hex_key_string, char *hex_iv_string,
328 char *hex_src_string, char *hex_dst_string,
331 unsigned char key_str[ARIA_MAX_KEY_STR];
332 unsigned char iv_str[ARIA_BLOCK_STR];
333 unsigned char src_str[ARIA_MAX_DATA_STR];
334 unsigned char dst_str[ARIA_MAX_DATA_STR];
335 unsigned char output[ARIA_MAX_DATASIZE];
336 mbedtls_aria_context ctx;
337 int key_len, data_len;
339 memset( key_str, 0x00, sizeof( key_str ) );
340 memset( iv_str, 0x00, sizeof( iv_str ) );
341 memset( src_str, 0x00, sizeof( src_str ) );
342 memset( dst_str, 0x00, sizeof( dst_str ) );
343 memset( output, 0x00, sizeof( output ) );
344 mbedtls_aria_init( &ctx );
346 key_len = unhexify( key_str, hex_key_string );
347 unhexify( iv_str, hex_iv_string );
348 data_len = unhexify( src_str, hex_src_string );
350 mbedtls_aria_setkey_dec( &ctx, key_str, key_len * 8 );
351 TEST_ASSERT( mbedtls_aria_crypt_cbc( &ctx, MBEDTLS_ARIA_DECRYPT, data_len,
352 iv_str, src_str, output )
354 if( cbc_result == 0 )
356 hexify( dst_str, output, data_len );
358 TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
362 mbedtls_aria_free( &ctx );
366 /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
367 void aria_encrypt_cfb128( char *hex_key_string, char *hex_iv_string,
368 char *hex_src_string, char *hex_dst_string,
371 unsigned char key_str[ARIA_MAX_KEY_STR];
372 unsigned char iv_str[ARIA_BLOCK_STR];
373 unsigned char src_str[ARIA_MAX_DATA_STR];
374 unsigned char dst_str[ARIA_MAX_DATA_STR];
375 unsigned char output[ARIA_MAX_DATASIZE];
376 mbedtls_aria_context ctx;
377 size_t iv_offset = 0;
378 int key_len, data_len;
380 memset( key_str, 0x00, sizeof( key_str ) );
381 memset( iv_str, 0x00, sizeof( iv_str ) );
382 memset( src_str, 0x00, sizeof( src_str ) );
383 memset( dst_str, 0x00, sizeof( dst_str ) );
384 memset( output, 0x00, sizeof( output ) );
385 mbedtls_aria_init( &ctx );
387 key_len = unhexify( key_str, hex_key_string );
388 unhexify( iv_str, hex_iv_string );
389 data_len = unhexify( src_str, hex_src_string );
391 mbedtls_aria_setkey_enc( &ctx, key_str, key_len * 8 );
392 TEST_ASSERT( mbedtls_aria_crypt_cfb128( &ctx, MBEDTLS_ARIA_ENCRYPT,
393 data_len, &iv_offset, iv_str,
396 hexify( dst_str, output, data_len );
398 TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
401 mbedtls_aria_free( &ctx );
405 /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
406 void aria_decrypt_cfb128( char *hex_key_string, char *hex_iv_string,
407 char *hex_src_string, char *hex_dst_string,
410 unsigned char key_str[ARIA_MAX_KEY_STR];
411 unsigned char iv_str[ARIA_BLOCK_STR];
412 unsigned char src_str[ARIA_MAX_DATA_STR];
413 unsigned char dst_str[ARIA_MAX_DATA_STR];
414 unsigned char output[ARIA_MAX_DATASIZE];
415 mbedtls_aria_context ctx;
416 size_t iv_offset = 0;
417 int key_len, data_len;
419 memset( key_str, 0x00, sizeof( key_str ) );
420 memset( iv_str, 0x00, sizeof( iv_str ) );
421 memset( src_str, 0x00, sizeof( src_str ) );
422 memset( dst_str, 0x00, sizeof( dst_str ) );
423 memset( output, 0x00, sizeof( output ) );
424 mbedtls_aria_init( &ctx );
426 key_len = unhexify( key_str, hex_key_string );
427 unhexify( iv_str, hex_iv_string );
428 data_len = unhexify( src_str, hex_src_string );
430 mbedtls_aria_setkey_enc( &ctx, key_str, key_len * 8 );
431 TEST_ASSERT( mbedtls_aria_crypt_cfb128( &ctx, MBEDTLS_ARIA_DECRYPT,
432 data_len, &iv_offset, iv_str,
435 hexify( dst_str, output, data_len );
437 TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
440 mbedtls_aria_free( &ctx );
444 /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
445 void aria_encrypt_ctr( char *hex_key_string, char *hex_iv_string,
446 char *hex_src_string, char *hex_dst_string,
449 unsigned char key_str[ARIA_MAX_KEY_STR];
450 unsigned char iv_str[ARIA_BLOCK_STR];
451 unsigned char src_str[ARIA_MAX_DATA_STR];
452 unsigned char dst_str[ARIA_MAX_DATA_STR];
453 unsigned char output[ARIA_MAX_DATASIZE];
454 unsigned char blk[MBEDTLS_ARIA_BLOCKSIZE];
455 mbedtls_aria_context ctx;
456 size_t iv_offset = 0;
457 int key_len, data_len;
459 memset( key_str, 0x00, sizeof( key_str ) );
460 memset( iv_str, 0x00, sizeof( iv_str ) );
461 memset( src_str, 0x00, sizeof( src_str ) );
462 memset( dst_str, 0x00, sizeof( dst_str ) );
463 memset( output, 0x00, sizeof( output ) );
464 mbedtls_aria_init( &ctx );
466 key_len = unhexify( key_str, hex_key_string );
467 unhexify( iv_str, hex_iv_string );
468 data_len = unhexify( src_str, hex_src_string );
470 mbedtls_aria_setkey_enc( &ctx, key_str, key_len * 8 );
471 TEST_ASSERT( mbedtls_aria_crypt_ctr( &ctx, data_len, &iv_offset, iv_str,
472 blk, src_str, output )
474 hexify( dst_str, output, data_len );
476 TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
479 mbedtls_aria_free( &ctx );
483 /* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
484 void aria_decrypt_ctr( char *hex_key_string, char *hex_iv_string,
485 char *hex_src_string, char *hex_dst_string,
488 unsigned char key_str[ARIA_MAX_KEY_STR];
489 unsigned char iv_str[ARIA_BLOCK_STR];
490 unsigned char src_str[ARIA_MAX_DATA_STR];
491 unsigned char dst_str[ARIA_MAX_DATA_STR];
492 unsigned char output[ARIA_MAX_DATASIZE];
493 unsigned char blk[MBEDTLS_ARIA_BLOCKSIZE];
494 mbedtls_aria_context ctx;
495 size_t iv_offset = 0;
496 int key_len, data_len;
498 memset( key_str, 0x00, sizeof( key_str ) );
499 memset( iv_str, 0x00, sizeof( iv_str ) );
500 memset( src_str, 0x00, sizeof( src_str ) );
501 memset( dst_str, 0x00, sizeof( dst_str ) );
502 memset( output, 0x00, sizeof( output ) );
503 mbedtls_aria_init( &ctx );
505 key_len = unhexify( key_str, hex_key_string );
506 unhexify( iv_str, hex_iv_string );
507 data_len = unhexify( src_str, hex_src_string );
509 mbedtls_aria_setkey_enc( &ctx, key_str, key_len * 8 );
510 TEST_ASSERT( mbedtls_aria_crypt_ctr( &ctx, data_len, &iv_offset, iv_str,
511 blk, src_str, output )
513 hexify( dst_str, output, data_len );
515 TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
518 mbedtls_aria_free( &ctx );
522 /* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
525 TEST_ASSERT( mbedtls_aria_self_test( 1 ) == 0 );