blob: a454ebaf7007e9beae0b8796ff3d62dd1c71d5dc [file] [log] [blame]
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +00001/* BEGIN_HEADER */
2#include "mbedtls/aria.h"
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +01003
Shaun Case8b0ecbc2021-12-20 21:14:10 -08004/* Maximum size of data used by test vectors
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +01005 * WARNING: to be adapted if and when adding larger test cases */
6#define ARIA_MAX_DATASIZE 160
7
8/* Maximum sizes of hexified things */
Gilles Peskine449bd832023-01-11 14:50:10 +01009#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)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000012/* END_HEADER */
13
14/* BEGIN_DEPENDENCIES
15 * depends_on:MBEDTLS_ARIA_C
16 * END_DEPENDENCIES
17 */
18
Valerio Setti76e4c632024-01-30 11:33:32 +010019/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010020void aria_invalid_param()
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050021{
22 mbedtls_aria_context ctx;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050023 unsigned char input[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
24 unsigned char output[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
25 unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
26 size_t iv_off = 0;
27
28 ((void) iv_off);
29 ((void) iv);
TRodziewiczbcd2b4b2021-05-28 12:56:57 +020030 ((void) ctx);
31 ((void) input);
32 ((void) output);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050033
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050034#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +010035 TEST_EQUAL(MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
36 mbedtls_aria_crypt_cbc(&ctx,
37 42 /* invalid mode */,
38 sizeof(input),
39 iv,
40 input,
41 output));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050042#endif /* MBEDTLS_CIPHER_MODE_CBC */
43
44#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +010045 TEST_EQUAL(MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
46 mbedtls_aria_crypt_cfb128(&ctx,
47 42, /* invalid mode */
48 sizeof(input),
49 &iv_off,
50 iv,
51 input,
52 output));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050053#endif /* MBEDTLS_CIPHER_MODE_CFB */
54
Valerio Setti76e4c632024-01-30 11:33:32 +010055#if defined(MBEDTLS_CIPHER_MODE_CBC) || defined(MBEDTLS_CIPHER_MODE_CFB)
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050056exit:
57 return;
Valerio Setti76e4c632024-01-30 11:33:32 +010058#endif
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050059
60}
61/* END_CASE */
62
63/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010064void aria_encrypt_ecb(data_t *key_str, data_t *src_str,
65 data_t *expected_output, int setkey_result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000066{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +010067 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000068 mbedtls_aria_context ctx;
Ronald Cron9ed40732020-06-25 09:03:34 +020069 size_t i;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000070
Gilles Peskine449bd832023-01-11 14:50:10 +010071 memset(output, 0x00, sizeof(output));
72 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000073
Gilles Peskine449bd832023-01-11 14:50:10 +010074 TEST_ASSERT(mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8)
75 == setkey_result);
76 if (setkey_result == 0) {
77 for (i = 0; i < src_str->len; i += MBEDTLS_ARIA_BLOCKSIZE) {
78 TEST_ASSERT(mbedtls_aria_crypt_ecb(&ctx, src_str->x + i,
79 output + i) == 0);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000080 }
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000081
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +010082 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +010083 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000084 }
85
86exit:
Gilles Peskine449bd832023-01-11 14:50:10 +010087 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000088}
89/* END_CASE */
90
Yanray Wangb67b4742023-10-31 17:10:32 +080091/* BEGIN_CASE depends_on:!MBEDTLS_BLOCK_CIPHER_NO_DECRYPT */
Gilles Peskine449bd832023-01-11 14:50:10 +010092void aria_decrypt_ecb(data_t *key_str, data_t *src_str,
93 data_t *expected_output, int setkey_result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000094{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +010095 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000096 mbedtls_aria_context ctx;
Ronald Cron9ed40732020-06-25 09:03:34 +020097 size_t i;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000098
Gilles Peskine449bd832023-01-11 14:50:10 +010099 memset(output, 0x00, sizeof(output));
100 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000101
Gilles Peskine449bd832023-01-11 14:50:10 +0100102 TEST_ASSERT(mbedtls_aria_setkey_dec(&ctx, key_str->x, key_str->len * 8)
103 == setkey_result);
104 if (setkey_result == 0) {
105 for (i = 0; i < src_str->len; i += MBEDTLS_ARIA_BLOCKSIZE) {
106 TEST_ASSERT(mbedtls_aria_crypt_ecb(&ctx, src_str->x + i,
107 output + i) == 0);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000108 }
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000109
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100110 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100111 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000112 }
113
114exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100115 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000116}
117/* END_CASE */
118
119/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine449bd832023-01-11 14:50:10 +0100120void aria_encrypt_cbc(data_t *key_str, data_t *iv_str,
121 data_t *src_str, data_t *expected_output,
122 int cbc_result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000123{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100124 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000125 mbedtls_aria_context ctx;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000126
Gilles Peskine449bd832023-01-11 14:50:10 +0100127 memset(output, 0x00, sizeof(output));
128 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000129
Gilles Peskine449bd832023-01-11 14:50:10 +0100130 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
131 TEST_ASSERT(mbedtls_aria_crypt_cbc(&ctx, MBEDTLS_ARIA_ENCRYPT,
132 src_str->len, iv_str->x, src_str->x,
133 output) == cbc_result);
134 if (cbc_result == 0) {
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100135 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100136 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000137 }
138
139exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100140 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000141}
142/* END_CASE */
143
144/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine449bd832023-01-11 14:50:10 +0100145void aria_decrypt_cbc(data_t *key_str, data_t *iv_str,
146 data_t *src_str, data_t *expected_output,
147 int cbc_result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000148{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100149 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000150 mbedtls_aria_context ctx;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000151
Gilles Peskine449bd832023-01-11 14:50:10 +0100152 memset(output, 0x00, sizeof(output));
153 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000154
Gilles Peskine449bd832023-01-11 14:50:10 +0100155 mbedtls_aria_setkey_dec(&ctx, key_str->x, key_str->len * 8);
156 TEST_ASSERT(mbedtls_aria_crypt_cbc(&ctx, MBEDTLS_ARIA_DECRYPT,
157 src_str->len, iv_str->x, src_str->x,
158 output) == cbc_result);
159 if (cbc_result == 0) {
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100160 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100161 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000162 }
163
164exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100165 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000166}
167/* END_CASE */
168
169/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100170void aria_encrypt_cfb128(data_t *key_str, data_t *iv_str,
171 data_t *src_str, data_t *expected_output,
172 int result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000173{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100174 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000175 mbedtls_aria_context ctx;
176 size_t iv_offset = 0;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000177
Gilles Peskine449bd832023-01-11 14:50:10 +0100178 memset(output, 0x00, sizeof(output));
179 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000180
Gilles Peskine449bd832023-01-11 14:50:10 +0100181 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
182 TEST_ASSERT(mbedtls_aria_crypt_cfb128(&ctx, MBEDTLS_ARIA_ENCRYPT,
183 src_str->len, &iv_offset,
184 iv_str->x, src_str->x, output)
185 == result);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000186
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100187 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100188 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000189
190exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100191 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000192}
193/* END_CASE */
194
195/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100196void aria_decrypt_cfb128(data_t *key_str, data_t *iv_str,
197 data_t *src_str, data_t *expected_output,
198 int result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000199{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100200 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000201 mbedtls_aria_context ctx;
202 size_t iv_offset = 0;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000203
Gilles Peskine449bd832023-01-11 14:50:10 +0100204 memset(output, 0x00, sizeof(output));
205 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000206
Gilles Peskine449bd832023-01-11 14:50:10 +0100207 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
208 TEST_ASSERT(mbedtls_aria_crypt_cfb128(&ctx, MBEDTLS_ARIA_DECRYPT,
209 src_str->len, &iv_offset,
210 iv_str->x, src_str->x, output)
211 == result);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000212
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100213 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100214 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000215
216exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100217 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000218}
219/* END_CASE */
220
221/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
Gilles Peskine449bd832023-01-11 14:50:10 +0100222void aria_encrypt_ctr(data_t *key_str, data_t *iv_str,
223 data_t *src_str, data_t *expected_output,
224 int result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000225{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100226 unsigned char output[ARIA_MAX_DATASIZE];
227 unsigned char blk[MBEDTLS_ARIA_BLOCKSIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000228 mbedtls_aria_context ctx;
229 size_t iv_offset = 0;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000230
Gilles Peskine449bd832023-01-11 14:50:10 +0100231 memset(output, 0x00, sizeof(output));
232 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000233
Gilles Peskine449bd832023-01-11 14:50:10 +0100234 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
235 TEST_ASSERT(mbedtls_aria_crypt_ctr(&ctx, src_str->len, &iv_offset,
236 iv_str->x, blk, src_str->x, output)
237 == result);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000238
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100239 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100240 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000241
242exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100243 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000244}
245/* END_CASE */
246
247/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
Gilles Peskine449bd832023-01-11 14:50:10 +0100248void aria_decrypt_ctr(data_t *key_str, data_t *iv_str,
249 data_t *src_str, data_t *expected_output,
250 int result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000251{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100252 unsigned char output[ARIA_MAX_DATASIZE];
253 unsigned char blk[MBEDTLS_ARIA_BLOCKSIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000254 mbedtls_aria_context ctx;
255 size_t iv_offset = 0;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000256
Gilles Peskine449bd832023-01-11 14:50:10 +0100257 memset(output, 0x00, sizeof(output));
258 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000259
Gilles Peskine449bd832023-01-11 14:50:10 +0100260 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
261 TEST_ASSERT(mbedtls_aria_crypt_ctr(&ctx, src_str->len, &iv_offset,
262 iv_str->x, blk, src_str->x, output)
263 == result);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000264
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100265 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100266 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000267
268exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100269 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000270}
271/* END_CASE */
272
273/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
274void aria_selftest()
275{
Gilles Peskine449bd832023-01-11 14:50:10 +0100276 TEST_ASSERT(mbedtls_aria_self_test(1) == 0);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000277}
278/* END_CASE */