53#if !defined(MBEDTLS_CONFIG_FILE)
56#include MBEDTLS_CONFIG_FILE
59#if defined(MBEDTLS_ARIA_C)
65#if defined(MBEDTLS_SELF_TEST)
66#if defined(MBEDTLS_PLATFORM_C)
70#define mbedtls_printf printf
74#if !defined(MBEDTLS_ARIA_ALT)
78#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
79 !defined(inline) && !defined(__cplusplus)
80#define inline __inline
84#define ARIA_VALIDATE_RET( cond ) \
85 MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_ARIA_BAD_INPUT_DATA )
86#define ARIA_VALIDATE( cond ) \
87 MBEDTLS_INTERNAL_VALIDATE( cond )
93#define GET_UINT32_LE( n, b, i ) \
95 (n) = ( (uint32_t) (b)[(i) ] ) \
96 | ( (uint32_t) (b)[(i) + 1] << 8 ) \
97 | ( (uint32_t) (b)[(i) + 2] << 16 ) \
98 | ( (uint32_t) (b)[(i) + 3] << 24 ); \
103#define PUT_UINT32_LE( n, b, i ) \
105 (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \
106 (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \
107 (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \
108 (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \
120#if defined(MBEDTLS_HAVE_ASM)
123#if defined(__GNUC__) && \
124 ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) && \
129 __asm(
"rev16 %0, %1" :
"=l" (
r) :
"l" (
x) );
132#define ARIA_P1 aria_p1
133#elif defined(__ARMCC_VERSION) && __ARMCC_VERSION < 6000000 && \
134 ( __TARGET_ARCH_ARM >= 6 || __TARGET_ARCH_THUMB >= 3 )
138 __asm(
"rev16 r, x" );
141#define ARIA_P1 aria_p1
144#if defined(__GNUC__) && \
145 defined(__i386__) || defined(__amd64__) || defined( __x86_64__)
147#define ARIA_P1(x) ARIA_P2( ARIA_P3( x ) )
151#define ARIA_P1(x) ((((x) >> 8) & 0x00FF00FF) ^ (((x) & 0x00FF00FF) << 8))
161#define ARIA_P2(x) (((x) >> 16) ^ ((x) << 16))
171#if defined(MBEDTLS_HAVE_ASM)
174#if defined(__GNUC__) && \
175 ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) && \
180 __asm(
"rev %0, %1" :
"=l" (
r) :
"l" (
x) );
183#define ARIA_P3 aria_p3
184#elif defined(__ARMCC_VERSION) && __ARMCC_VERSION < 6000000 && \
185 ( __TARGET_ARCH_ARM >= 6 || __TARGET_ARCH_THUMB >= 3 )
192#define ARIA_P3 aria_p3
195#if defined(__GNUC__) && \
196 defined(__i386__) || defined(__amd64__) || defined( __x86_64__)
199 __asm(
"bswap %0" :
"=r" (
x) :
"0" (
x) );
202#define ARIA_P3 aria_p3
206#define ARIA_P3(x) ARIA_P2( ARIA_P1 ( x ) )
244 ta = ARIA_P1( ta ) ^
tc ^ *
c;
248 tb = ARIA_P2(
tb ) ^ ta;
251 *
d ^= ARIA_P1( ta ) ^
tc;
253 *
c ^= ARIA_P1(
tc ) ^ ta;
271 (((
uint32_t) sc[(*
a >> 16) & 0xFF]) << 16) ^
275 (((
uint32_t) sc[(*
b >> 16) & 0xFF]) << 16) ^
279 (((
uint32_t) sc[(*
c >> 16) & 0xFF]) << 16) ^
283 (((
uint32_t) sc[(*
d >> 16) & 0xFF]) << 16) ^
290static const uint8_t aria_sb1[256] =
292 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B,
293 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
294 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26,
295 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
296 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2,
297 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
298 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED,
299 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
300 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F,
301 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
302 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC,
303 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
304 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14,
305 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
306 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D,
307 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
308 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F,
309 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
310 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11,
311 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
312 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F,
313 0xB0, 0x54, 0xBB, 0x16
316static const uint8_t aria_sb2[256] =
318 0xE2, 0x4E, 0x54, 0xFC, 0x94, 0xC2, 0x4A, 0xCC, 0x62, 0x0D, 0x6A, 0x46,
319 0x3C, 0x4D, 0x8B, 0xD1, 0x5E, 0xFA, 0x64, 0xCB, 0xB4, 0x97, 0xBE, 0x2B,
320 0xBC, 0x77, 0x2E, 0x03, 0xD3, 0x19, 0x59, 0xC1, 0x1D, 0x06, 0x41, 0x6B,
321 0x55, 0xF0, 0x99, 0x69, 0xEA, 0x9C, 0x18, 0xAE, 0x63, 0xDF, 0xE7, 0xBB,
322 0x00, 0x73, 0x66, 0xFB, 0x96, 0x4C, 0x85, 0xE4, 0x3A, 0x09, 0x45, 0xAA,
323 0x0F, 0xEE, 0x10, 0xEB, 0x2D, 0x7F, 0xF4, 0x29, 0xAC, 0xCF, 0xAD, 0x91,
324 0x8D, 0x78, 0xC8, 0x95, 0xF9, 0x2F, 0xCE, 0xCD, 0x08, 0x7A, 0x88, 0x38,
325 0x5C, 0x83, 0x2A, 0x28, 0x47, 0xDB, 0xB8, 0xC7, 0x93, 0xA4, 0x12, 0x53,
326 0xFF, 0x87, 0x0E, 0x31, 0x36, 0x21, 0x58, 0x48, 0x01, 0x8E, 0x37, 0x74,
327 0x32, 0xCA, 0xE9, 0xB1, 0xB7, 0xAB, 0x0C, 0xD7, 0xC4, 0x56, 0x42, 0x26,
328 0x07, 0x98, 0x60, 0xD9, 0xB6, 0xB9, 0x11, 0x40, 0xEC, 0x20, 0x8C, 0xBD,
329 0xA0, 0xC9, 0x84, 0x04, 0x49, 0x23, 0xF1, 0x4F, 0x50, 0x1F, 0x13, 0xDC,
330 0xD8, 0xC0, 0x9E, 0x57, 0xE3, 0xC3, 0x7B, 0x65, 0x3B, 0x02, 0x8F, 0x3E,
331 0xE8, 0x25, 0x92, 0xE5, 0x15, 0xDD, 0xFD, 0x17, 0xA9, 0xBF, 0xD4, 0x9A,
332 0x7E, 0xC5, 0x39, 0x67, 0xFE, 0x76, 0x9D, 0x43, 0xA7, 0xE1, 0xD0, 0xF5,
333 0x68, 0xF2, 0x1B, 0x34, 0x70, 0x05, 0xA3, 0x8A, 0xD5, 0x79, 0x86, 0xA8,
334 0x30, 0xC6, 0x51, 0x4B, 0x1E, 0xA6, 0x27, 0xF6, 0x35, 0xD2, 0x6E, 0x24,
335 0x16, 0x82, 0x5F, 0xDA, 0xE6, 0x75, 0xA2, 0xEF, 0x2C, 0xB2, 0x1C, 0x9F,
336 0x5D, 0x6F, 0x80, 0x0A, 0x72, 0x44, 0x9B, 0x6C, 0x90, 0x0B, 0x5B, 0x33,
337 0x7D, 0x5A, 0x52, 0xF3, 0x61, 0xA1, 0xF7, 0xB0, 0xD6, 0x3F, 0x7C, 0x6D,
338 0xED, 0x14, 0xE0, 0xA5, 0x3D, 0x22, 0xB3, 0xF8, 0x89, 0xDE, 0x71, 0x1A,
339 0xAF, 0xBA, 0xB5, 0x81
342static const uint8_t aria_is1[256] =
344 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E,
345 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
346 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32,
347 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
348 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49,
349 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
350 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50,
351 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
352 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05,
353 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
354 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41,
355 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
356 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8,
357 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
358 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B,
359 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
360 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59,
361 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
362 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D,
363 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
364 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63,
365 0x55, 0x21, 0x0C, 0x7D
368static const uint8_t aria_is2[256] =
370 0x30, 0x68, 0x99, 0x1B, 0x87, 0xB9, 0x21, 0x78, 0x50, 0x39, 0xDB, 0xE1,
371 0x72, 0x09, 0x62, 0x3C, 0x3E, 0x7E, 0x5E, 0x8E, 0xF1, 0xA0, 0xCC, 0xA3,
372 0x2A, 0x1D, 0xFB, 0xB6, 0xD6, 0x20, 0xC4, 0x8D, 0x81, 0x65, 0xF5, 0x89,
373 0xCB, 0x9D, 0x77, 0xC6, 0x57, 0x43, 0x56, 0x17, 0xD4, 0x40, 0x1A, 0x4D,
374 0xC0, 0x63, 0x6C, 0xE3, 0xB7, 0xC8, 0x64, 0x6A, 0x53, 0xAA, 0x38, 0x98,
375 0x0C, 0xF4, 0x9B, 0xED, 0x7F, 0x22, 0x76, 0xAF, 0xDD, 0x3A, 0x0B, 0x58,
376 0x67, 0x88, 0x06, 0xC3, 0x35, 0x0D, 0x01, 0x8B, 0x8C, 0xC2, 0xE6, 0x5F,
377 0x02, 0x24, 0x75, 0x93, 0x66, 0x1E, 0xE5, 0xE2, 0x54, 0xD8, 0x10, 0xCE,
378 0x7A, 0xE8, 0x08, 0x2C, 0x12, 0x97, 0x32, 0xAB, 0xB4, 0x27, 0x0A, 0x23,
379 0xDF, 0xEF, 0xCA, 0xD9, 0xB8, 0xFA, 0xDC, 0x31, 0x6B, 0xD1, 0xAD, 0x19,
380 0x49, 0xBD, 0x51, 0x96, 0xEE, 0xE4, 0xA8, 0x41, 0xDA, 0xFF, 0xCD, 0x55,
381 0x86, 0x36, 0xBE, 0x61, 0x52, 0xF8, 0xBB, 0x0E, 0x82, 0x48, 0x69, 0x9A,
382 0xE0, 0x47, 0x9E, 0x5C, 0x04, 0x4B, 0x34, 0x15, 0x79, 0x26, 0xA7, 0xDE,
383 0x29, 0xAE, 0x92, 0xD7, 0x84, 0xE9, 0xD2, 0xBA, 0x5D, 0xF3, 0xC5, 0xB0,
384 0xBF, 0xA4, 0x3B, 0x71, 0x44, 0x46, 0x2B, 0xFC, 0xEB, 0x6F, 0xD5, 0xF6,
385 0x14, 0xFE, 0x7C, 0x70, 0x5A, 0x7D, 0xFD, 0x2F, 0x18, 0x83, 0x16, 0xA5,
386 0x91, 0x1F, 0x05, 0x95, 0x74, 0xA9, 0xC1, 0x5B, 0x4A, 0x85, 0x6D, 0x13,
387 0x07, 0x4F, 0x4E, 0x45, 0xB2, 0x0F, 0xC9, 0x1C, 0xA6, 0xBC, 0xEC, 0x73,
388 0x90, 0x7B, 0xCF, 0x59, 0x8F, 0xA1, 0xF9, 0x2D, 0xF2, 0xB1, 0x00, 0x94,
389 0x37, 0x9F, 0xD0, 0x2E, 0x9C, 0x6E, 0x28, 0x3F, 0x80, 0xF0, 0x3D, 0xD3,
390 0x25, 0x8A, 0xB5, 0xE7, 0x42, 0xB3, 0xC7, 0xEA, 0xF7, 0x4C, 0x11, 0x33,
391 0x03, 0xA2, 0xAC, 0x60
407 aria_sl( &
a, &
b, &
c, &
d, aria_sb1, aria_sb2, aria_is1, aria_is2 );
408 aria_a( &
a, &
b, &
c, &
d );
429 aria_sl( &
a, &
b, &
c, &
d, aria_is1, aria_is2, aria_sb1, aria_sb2 );
430 aria_a( &
a, &
b, &
c, &
d );
455 for(
i = 0;
i < 4;
i++ )
471 const unsigned char *
key,
unsigned int keybits )
476 { 0xB7C17C51, 0x940A2227, 0xE8AB13FE, 0xE06E9AFA },
477 { 0xCC4AB16D, 0x20C8219E, 0xD5B128FF, 0xB0E25DEF },
478 { 0x1D3792DB, 0x70E92621, 0x75972403, 0x0EC9E804 }
483 ARIA_VALIDATE_RET(
ctx !=
NULL );
484 ARIA_VALIDATE_RET(
key !=
NULL );
486 if( keybits != 128 && keybits != 192 && keybits != 256 )
490 GET_UINT32_LE(
w[0][0],
key, 0 );
491 GET_UINT32_LE(
w[0][1],
key, 4 );
492 GET_UINT32_LE(
w[0][2],
key, 8 );
493 GET_UINT32_LE(
w[0][3],
key, 12 );
498 GET_UINT32_LE(
w[1][0],
key, 16 );
499 GET_UINT32_LE(
w[1][1],
key, 20 );
503 GET_UINT32_LE(
w[1][2],
key, 24 );
504 GET_UINT32_LE(
w[1][3],
key, 28 );
507 i = ( keybits - 128 ) >> 6;
508 ctx->nr = 12 + 2 *
i;
510 aria_fo_xor(
w[1],
w[0], rc[
i],
w[1] );
511 i =
i < 2 ?
i + 1 : 0;
512 aria_fe_xor(
w[2],
w[1], rc[
i],
w[0] );
513 i =
i < 2 ?
i + 1 : 0;
514 aria_fo_xor(
w[3],
w[2], rc[
i],
w[1] );
516 for(
i = 0;
i < 4;
i++ )
519 aria_rot128(
ctx->rk[
i ],
w[
i],
w2, 128 - 19 );
520 aria_rot128(
ctx->rk[
i + 4],
w[
i],
w2, 128 - 31 );
521 aria_rot128(
ctx->rk[
i + 8],
w[
i],
w2, 61 );
522 aria_rot128(
ctx->rk[
i + 12],
w[
i],
w2, 31 );
524 aria_rot128(
ctx->rk[16],
w[0],
w[1], 19 );
536 const unsigned char *
key,
unsigned int keybits )
539 ARIA_VALIDATE_RET(
ctx !=
NULL );
540 ARIA_VALIDATE_RET(
key !=
NULL );
547 for(
i = 0,
j =
ctx->nr;
i <
j;
i++,
j-- )
549 for(
k = 0;
k < 4;
k++ )
558 for(
i = 1;
i <
ctx->nr;
i++ )
560 aria_a( &
ctx->rk[
i][0], &
ctx->rk[
i][1],
577 ARIA_VALIDATE_RET(
ctx !=
NULL );
579 ARIA_VALIDATE_RET( output !=
NULL );
581 GET_UINT32_LE(
a,
input, 0 );
582 GET_UINT32_LE(
b,
input, 4 );
583 GET_UINT32_LE(
c,
input, 8 );
584 GET_UINT32_LE(
d,
input, 12 );
595 aria_sl( &
a, &
b, &
c, &
d, aria_sb1, aria_sb2, aria_is1, aria_is2 );
596 aria_a( &
a, &
b, &
c, &
d );
604 aria_sl( &
a, &
b, &
c, &
d, aria_is1, aria_is2, aria_sb1, aria_sb2 );
607 aria_a( &
a, &
b, &
c, &
d );
616 PUT_UINT32_LE(
a, output, 0 );
617 PUT_UINT32_LE(
b, output, 4 );
618 PUT_UINT32_LE(
c, output, 8 );
619 PUT_UINT32_LE(
d, output, 12 );
640#if defined(MBEDTLS_CIPHER_MODE_CBC)
648 const unsigned char *
input,
649 unsigned char *output )
654 ARIA_VALIDATE_RET(
ctx !=
NULL );
658 ARIA_VALIDATE_RET(
length == 0 || output !=
NULL );
659 ARIA_VALIDATE_RET( iv !=
NULL );
672 output[
i] = (
unsigned char)( output[
i] ^ iv[
i] );
686 output[
i] = (
unsigned char)(
input[
i] ^ iv[
i] );
701#if defined(MBEDTLS_CIPHER_MODE_CFB)
710 const unsigned char *
input,
711 unsigned char *output )
716 ARIA_VALIDATE_RET(
ctx !=
NULL );
720 ARIA_VALIDATE_RET(
length == 0 || output !=
NULL );
721 ARIA_VALIDATE_RET( iv !=
NULL );
722 ARIA_VALIDATE_RET( iv_off !=
NULL );
740 *output++ =
c ^ iv[
n];
743 n = (
n + 1 ) & 0x0F;
753 iv[
n] = *output++ = (
unsigned char)( iv[
n] ^ *
input++ );
755 n = (
n + 1 ) & 0x0F;
765#if defined(MBEDTLS_CIPHER_MODE_CTR)
774 const unsigned char *
input,
775 unsigned char *output )
780 ARIA_VALIDATE_RET(
ctx !=
NULL );
782 ARIA_VALIDATE_RET(
length == 0 || output !=
NULL );
783 ARIA_VALIDATE_RET( nonce_counter !=
NULL );
784 ARIA_VALIDATE_RET( stream_block !=
NULL );
785 ARIA_VALIDATE_RET( nc_off !=
NULL );
801 if( ++nonce_counter[
i - 1] != 0 )
805 *output++ = (
unsigned char)(
c ^ stream_block[
n] );
807 n = (
n + 1 ) & 0x0F;
817#if defined(MBEDTLS_SELF_TEST)
822static const uint8_t aria_test1_ecb_key[32] =
824 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
825 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
826 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
827 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
832 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
833 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
838 { 0xD7, 0x18, 0xFB, 0xD6, 0xAB, 0x64, 0x4C, 0x73,
839 0x9D, 0xA9, 0x5F, 0x3B, 0xE6, 0x45, 0x17, 0x78 },
840 { 0x26, 0x44, 0x9C, 0x18, 0x05, 0xDB, 0xE7, 0xAA,
841 0x25, 0xA4, 0x68, 0xCE, 0x26, 0x3A, 0x9E, 0x79 },
842 { 0xF9, 0x2B, 0xD7, 0xC7, 0x9F, 0xB7, 0x2E, 0x2F,
843 0x2B, 0x8F, 0x80, 0xC1, 0x97, 0x2D, 0x24, 0xFC }
850#if (defined(MBEDTLS_CIPHER_MODE_CBC) || defined(MBEDTLS_CIPHER_MODE_CFB) || \
851 defined(MBEDTLS_CIPHER_MODE_CTR))
852static const uint8_t aria_test2_key[32] =
854 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
855 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
856 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
857 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
860static const uint8_t aria_test2_pt[48] =
862 0x11, 0x11, 0x11, 0x11, 0xaa, 0xaa, 0xaa, 0xaa,
863 0x11, 0x11, 0x11, 0x11, 0xbb, 0xbb, 0xbb, 0xbb,
864 0x11, 0x11, 0x11, 0x11, 0xcc, 0xcc, 0xcc, 0xcc,
865 0x11, 0x11, 0x11, 0x11, 0xdd, 0xdd, 0xdd, 0xdd,
866 0x22, 0x22, 0x22, 0x22, 0xaa, 0xaa, 0xaa, 0xaa,
867 0x22, 0x22, 0x22, 0x22, 0xbb, 0xbb, 0xbb, 0xbb,
871#if (defined(MBEDTLS_CIPHER_MODE_CBC) || defined(MBEDTLS_CIPHER_MODE_CFB))
874 0x0f, 0x1e, 0x2d, 0x3c, 0x4b, 0x5a, 0x69, 0x78,
875 0x87, 0x96, 0xa5, 0xb4, 0xc3, 0xd2, 0xe1, 0xf0
879#if defined(MBEDTLS_CIPHER_MODE_CBC)
880static const uint8_t aria_test2_cbc_ct[3][48] =
882 { 0x49, 0xd6, 0x18, 0x60, 0xb1, 0x49, 0x09, 0x10,
883 0x9c, 0xef, 0x0d, 0x22, 0xa9, 0x26, 0x81, 0x34,
884 0xfa, 0xdf, 0x9f, 0xb2, 0x31, 0x51, 0xe9, 0x64,
885 0x5f, 0xba, 0x75, 0x01, 0x8b, 0xdb, 0x15, 0x38,
886 0xb5, 0x33, 0x34, 0x63, 0x4b, 0xbf, 0x7d, 0x4c,
887 0xd4, 0xb5, 0x37, 0x70, 0x33, 0x06, 0x0c, 0x15 },
888 { 0xaf, 0xe6, 0xcf, 0x23, 0x97, 0x4b, 0x53, 0x3c,
889 0x67, 0x2a, 0x82, 0x62, 0x64, 0xea, 0x78, 0x5f,
890 0x4e, 0x4f, 0x7f, 0x78, 0x0d, 0xc7, 0xf3, 0xf1,
891 0xe0, 0x96, 0x2b, 0x80, 0x90, 0x23, 0x86, 0xd5,
892 0x14, 0xe9, 0xc3, 0xe7, 0x72, 0x59, 0xde, 0x92,
893 0xdd, 0x11, 0x02, 0xff, 0xab, 0x08, 0x6c, 0x1e },
894 { 0x52, 0x3a, 0x8a, 0x80, 0x6a, 0xe6, 0x21, 0xf1,
895 0x55, 0xfd, 0xd2, 0x8d, 0xbc, 0x34, 0xe1, 0xab,
896 0x7b, 0x9b, 0x42, 0x43, 0x2a, 0xd8, 0xb2, 0xef,
897 0xb9, 0x6e, 0x23, 0xb1, 0x3f, 0x0a, 0x6e, 0x52,
898 0xf3, 0x61, 0x85, 0xd5, 0x0a, 0xd0, 0x02, 0xc5,
899 0xf6, 0x01, 0xbe, 0xe5, 0x49, 0x3f, 0x11, 0x8b }
903#if defined(MBEDTLS_CIPHER_MODE_CFB)
904static const uint8_t aria_test2_cfb_ct[3][48] =
906 { 0x37, 0x20, 0xe5, 0x3b, 0xa7, 0xd6, 0x15, 0x38,
907 0x34, 0x06, 0xb0, 0x9f, 0x0a, 0x05, 0xa2, 0x00,
908 0xc0, 0x7c, 0x21, 0xe6, 0x37, 0x0f, 0x41, 0x3a,
909 0x5d, 0x13, 0x25, 0x00, 0xa6, 0x82, 0x85, 0x01,
910 0x7c, 0x61, 0xb4, 0x34, 0xc7, 0xb7, 0xca, 0x96,
911 0x85, 0xa5, 0x10, 0x71, 0x86, 0x1e, 0x4d, 0x4b },
912 { 0x41, 0x71, 0xf7, 0x19, 0x2b, 0xf4, 0x49, 0x54,
913 0x94, 0xd2, 0x73, 0x61, 0x29, 0x64, 0x0f, 0x5c,
914 0x4d, 0x87, 0xa9, 0xa2, 0x13, 0x66, 0x4c, 0x94,
915 0x48, 0x47, 0x7c, 0x6e, 0xcc, 0x20, 0x13, 0x59,
916 0x8d, 0x97, 0x66, 0x95, 0x2d, 0xd8, 0xc3, 0x86,
917 0x8f, 0x17, 0xe3, 0x6e, 0xf6, 0x6f, 0xd8, 0x4b },
918 { 0x26, 0x83, 0x47, 0x05, 0xb0, 0xf2, 0xc0, 0xe2,
919 0x58, 0x8d, 0x4a, 0x7f, 0x09, 0x00, 0x96, 0x35,
920 0xf2, 0x8b, 0xb9, 0x3d, 0x8c, 0x31, 0xf8, 0x70,
921 0xec, 0x1e, 0x0b, 0xdb, 0x08, 0x2b, 0x66, 0xfa,
922 0x40, 0x2d, 0xd9, 0xc2, 0x02, 0xbe, 0x30, 0x0c,
923 0x45, 0x17, 0xd1, 0x96, 0xb1, 0x4d, 0x4c, 0xe1 }
927#if defined(MBEDTLS_CIPHER_MODE_CTR)
928static const uint8_t aria_test2_ctr_ct[3][48] =
930 { 0xac, 0x5d, 0x7d, 0xe8, 0x05, 0xa0, 0xbf, 0x1c,
931 0x57, 0xc8, 0x54, 0x50, 0x1a, 0xf6, 0x0f, 0xa1,
932 0x14, 0x97, 0xe2, 0xa3, 0x45, 0x19, 0xde, 0xa1,
933 0x56, 0x9e, 0x91, 0xe5, 0xb5, 0xcc, 0xae, 0x2f,
934 0xf3, 0xbf, 0xa1, 0xbf, 0x97, 0x5f, 0x45, 0x71,
935 0xf4, 0x8b, 0xe1, 0x91, 0x61, 0x35, 0x46, 0xc3 },
936 { 0x08, 0x62, 0x5c, 0xa8, 0xfe, 0x56, 0x9c, 0x19,
937 0xba, 0x7a, 0xf3, 0x76, 0x0a, 0x6e, 0xd1, 0xce,
938 0xf4, 0xd1, 0x99, 0x26, 0x3e, 0x99, 0x9d, 0xde,
939 0x14, 0x08, 0x2d, 0xbb, 0xa7, 0x56, 0x0b, 0x79,
940 0xa4, 0xc6, 0xb4, 0x56, 0xb8, 0x70, 0x7d, 0xce,
941 0x75, 0x1f, 0x98, 0x54, 0xf1, 0x88, 0x93, 0xdf },
942 { 0x30, 0x02, 0x6c, 0x32, 0x96, 0x66, 0x14, 0x17,
943 0x21, 0x17, 0x8b, 0x99, 0xc0, 0xa1, 0xf1, 0xb2,
944 0xf0, 0x69, 0x40, 0x25, 0x3f, 0x7b, 0x30, 0x89,
945 0xe2, 0xa3, 0x0e, 0xa8, 0x6a, 0xa3, 0xc8, 0x8f,
946 0x59, 0x40, 0xf0, 0x5a, 0xd7, 0xee, 0x41, 0xd7,
947 0x13, 0x47, 0xbb, 0x72, 0x61, 0xe3, 0x48, 0xf1 }
951#define ARIA_SELF_TEST_IF_FAIL \
954 mbedtls_printf( "failed\n" ); \
958 mbedtls_printf( "passed\n" ); \
964int mbedtls_aria_self_test(
int verbose )
971#if (defined(MBEDTLS_CIPHER_MODE_CFB) || defined(MBEDTLS_CIPHER_MODE_CTR))
975#if (defined(MBEDTLS_CIPHER_MODE_CBC) || \
976 defined(MBEDTLS_CIPHER_MODE_CFB) || \
977 defined(MBEDTLS_CIPHER_MODE_CTR))
986 for(
i = 0;
i < 3;
i++ )
994 ARIA_SELF_TEST_IF_FAIL;
1002 ARIA_SELF_TEST_IF_FAIL;
1010#if defined(MBEDTLS_CIPHER_MODE_CBC)
1011 for(
i = 0;
i < 3;
i++ )
1020 aria_test2_pt,
buf );
1021 if(
memcmp(
buf, aria_test2_cbc_ct[
i], 48 ) != 0 )
1022 ARIA_SELF_TEST_IF_FAIL;
1031 aria_test2_cbc_ct[
i],
buf );
1032 if(
memcmp(
buf, aria_test2_pt, 48 ) != 0 )
1033 ARIA_SELF_TEST_IF_FAIL;
1040#if defined(MBEDTLS_CIPHER_MODE_CFB)
1041 for(
i = 0;
i < 3;
i++ )
1051 aria_test2_pt,
buf );
1052 if(
memcmp(
buf, aria_test2_cfb_ct[
i], 48 ) != 0 )
1053 ARIA_SELF_TEST_IF_FAIL;
1063 iv, aria_test2_cfb_ct[
i],
buf );
1064 if(
memcmp(
buf, aria_test2_pt, 48 ) != 0 )
1065 ARIA_SELF_TEST_IF_FAIL;
1071#if defined(MBEDTLS_CIPHER_MODE_CTR)
1072 for(
i = 0;
i < 3;
i++ )
1082 aria_test2_pt,
buf );
1083 if(
memcmp(
buf, aria_test2_ctr_ct[
i], 48 ) != 0 )
1084 ARIA_SELF_TEST_IF_FAIL;
1094 aria_test2_ctr_ct[
i],
buf );
1095 if(
memcmp(
buf, aria_test2_pt, 48 ) != 0 )
1096 ARIA_SELF_TEST_IF_FAIL;
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
static struct sockaddr_in sa
int mbedtls_aria_crypt_cbc(mbedtls_aria_context *ctx, int mode, size_t length, unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE], const unsigned char *input, unsigned char *output)
This function performs an ARIA-CBC encryption or decryption operation on full blocks.
int mbedtls_aria_crypt_cfb128(mbedtls_aria_context *ctx, int mode, size_t length, size_t *iv_off, unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE], const unsigned char *input, unsigned char *output)
This function performs an ARIA-CFB128 encryption or decryption operation.
#define MBEDTLS_ARIA_DECRYPT
void mbedtls_aria_init(mbedtls_aria_context *ctx)
This function initializes the specified ARIA context.
#define MBEDTLS_ERR_ARIA_INVALID_INPUT_LENGTH
int mbedtls_aria_setkey_dec(mbedtls_aria_context *ctx, const unsigned char *key, unsigned int keybits)
This function sets the decryption key.
#define MBEDTLS_ARIA_BLOCKSIZE
int mbedtls_aria_crypt_ecb(mbedtls_aria_context *ctx, const unsigned char input[MBEDTLS_ARIA_BLOCKSIZE], unsigned char output[MBEDTLS_ARIA_BLOCKSIZE])
This function performs an ARIA single-block encryption or decryption operation.
void mbedtls_aria_free(mbedtls_aria_context *ctx)
This function releases and clears the specified ARIA context.
#define MBEDTLS_ARIA_ENCRYPT
int mbedtls_aria_setkey_enc(mbedtls_aria_context *ctx, const unsigned char *key, unsigned int keybits)
This function sets the encryption key.
#define MBEDTLS_ERR_ARIA_BAD_INPUT_DATA
int mbedtls_aria_crypt_ctr(mbedtls_aria_context *ctx, size_t length, size_t *nc_off, unsigned char nonce_counter[MBEDTLS_ARIA_BLOCKSIZE], unsigned char stream_block[MBEDTLS_ARIA_BLOCKSIZE], const unsigned char *input, unsigned char *output)
This function performs an ARIA-CTR encryption or decryption operation.
GLint GLint GLint GLint GLint x
GLdouble GLdouble GLdouble r
GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint GLdouble GLdouble w2
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
GLboolean GLboolean GLboolean GLboolean a
GLenum GLenum GLenum input
GLubyte GLubyte GLubyte GLubyte w
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define memcpy(s1, s2, n)
Configuration options (set of defines)
The ARIA context-type definition.