blob: 579dddf3bbd91cb0dca26ec8e3596f4404c9f51d [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
TRodziewicz062f3532021-05-25 15:15:57 +020019/* BEGIN_CASE depends_on:NOT_DEFINED */
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
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050055exit:
56 return;
57
58}
59/* END_CASE */
60
61/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010062void aria_encrypt_ecb(data_t *key_str, data_t *src_str,
63 data_t *expected_output, int setkey_result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000064{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +010065 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000066 mbedtls_aria_context ctx;
Ronald Cron9ed40732020-06-25 09:03:34 +020067 size_t i;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000068
Gilles Peskine449bd832023-01-11 14:50:10 +010069 memset(output, 0x00, sizeof(output));
70 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000071
Gilles Peskine449bd832023-01-11 14:50:10 +010072 TEST_ASSERT(mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8)
73 == setkey_result);
74 if (setkey_result == 0) {
75 for (i = 0; i < src_str->len; i += MBEDTLS_ARIA_BLOCKSIZE) {
76 TEST_ASSERT(mbedtls_aria_crypt_ecb(&ctx, src_str->x + i,
77 output + i) == 0);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000078 }
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000079
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +010080 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +010081 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000082 }
83
84exit:
Gilles Peskine449bd832023-01-11 14:50:10 +010085 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000086}
87/* END_CASE */
88
89/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010090void aria_decrypt_ecb(data_t *key_str, data_t *src_str,
91 data_t *expected_output, int setkey_result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000092{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +010093 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000094 mbedtls_aria_context ctx;
Ronald Cron9ed40732020-06-25 09:03:34 +020095 size_t i;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000096
Gilles Peskine449bd832023-01-11 14:50:10 +010097 memset(output, 0x00, sizeof(output));
98 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +000099
Gilles Peskine449bd832023-01-11 14:50:10 +0100100 TEST_ASSERT(mbedtls_aria_setkey_dec(&ctx, key_str->x, key_str->len * 8)
101 == setkey_result);
102 if (setkey_result == 0) {
103 for (i = 0; i < src_str->len; i += MBEDTLS_ARIA_BLOCKSIZE) {
104 TEST_ASSERT(mbedtls_aria_crypt_ecb(&ctx, src_str->x + i,
105 output + i) == 0);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000106 }
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000107
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100108 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100109 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000110 }
111
112exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100113 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000114}
115/* END_CASE */
116
117/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine449bd832023-01-11 14:50:10 +0100118void aria_encrypt_cbc(data_t *key_str, data_t *iv_str,
119 data_t *src_str, data_t *expected_output,
120 int cbc_result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000121{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100122 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000123 mbedtls_aria_context ctx;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000124
Gilles Peskine449bd832023-01-11 14:50:10 +0100125 memset(output, 0x00, sizeof(output));
126 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000127
Gilles Peskine449bd832023-01-11 14:50:10 +0100128 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
129 TEST_ASSERT(mbedtls_aria_crypt_cbc(&ctx, MBEDTLS_ARIA_ENCRYPT,
130 src_str->len, iv_str->x, src_str->x,
131 output) == cbc_result);
132 if (cbc_result == 0) {
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100133 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100134 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000135 }
136
137exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100138 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000139}
140/* END_CASE */
141
142/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine449bd832023-01-11 14:50:10 +0100143void aria_decrypt_cbc(data_t *key_str, data_t *iv_str,
144 data_t *src_str, data_t *expected_output,
145 int cbc_result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000146{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100147 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000148 mbedtls_aria_context ctx;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000149
Gilles Peskine449bd832023-01-11 14:50:10 +0100150 memset(output, 0x00, sizeof(output));
151 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000152
Gilles Peskine449bd832023-01-11 14:50:10 +0100153 mbedtls_aria_setkey_dec(&ctx, key_str->x, key_str->len * 8);
154 TEST_ASSERT(mbedtls_aria_crypt_cbc(&ctx, MBEDTLS_ARIA_DECRYPT,
155 src_str->len, iv_str->x, src_str->x,
156 output) == cbc_result);
157 if (cbc_result == 0) {
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100158 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100159 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000160 }
161
162exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100163 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000164}
165/* END_CASE */
166
167/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100168void aria_encrypt_cfb128(data_t *key_str, data_t *iv_str,
169 data_t *src_str, data_t *expected_output,
170 int result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000171{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100172 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000173 mbedtls_aria_context ctx;
174 size_t iv_offset = 0;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000175
Gilles Peskine449bd832023-01-11 14:50:10 +0100176 memset(output, 0x00, sizeof(output));
177 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000178
Gilles Peskine449bd832023-01-11 14:50:10 +0100179 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
180 TEST_ASSERT(mbedtls_aria_crypt_cfb128(&ctx, MBEDTLS_ARIA_ENCRYPT,
181 src_str->len, &iv_offset,
182 iv_str->x, src_str->x, output)
183 == result);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000184
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100185 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100186 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000187
188exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100189 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000190}
191/* END_CASE */
192
193/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine449bd832023-01-11 14:50:10 +0100194void aria_decrypt_cfb128(data_t *key_str, data_t *iv_str,
195 data_t *src_str, data_t *expected_output,
196 int result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000197{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100198 unsigned char output[ARIA_MAX_DATASIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000199 mbedtls_aria_context ctx;
200 size_t iv_offset = 0;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000201
Gilles Peskine449bd832023-01-11 14:50:10 +0100202 memset(output, 0x00, sizeof(output));
203 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000204
Gilles Peskine449bd832023-01-11 14:50:10 +0100205 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
206 TEST_ASSERT(mbedtls_aria_crypt_cfb128(&ctx, MBEDTLS_ARIA_DECRYPT,
207 src_str->len, &iv_offset,
208 iv_str->x, src_str->x, output)
209 == result);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000210
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100211 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100212 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000213
214exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100215 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000216}
217/* END_CASE */
218
219/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
Gilles Peskine449bd832023-01-11 14:50:10 +0100220void aria_encrypt_ctr(data_t *key_str, data_t *iv_str,
221 data_t *src_str, data_t *expected_output,
222 int result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000223{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100224 unsigned char output[ARIA_MAX_DATASIZE];
225 unsigned char blk[MBEDTLS_ARIA_BLOCKSIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000226 mbedtls_aria_context ctx;
227 size_t iv_offset = 0;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000228
Gilles Peskine449bd832023-01-11 14:50:10 +0100229 memset(output, 0x00, sizeof(output));
230 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000231
Gilles Peskine449bd832023-01-11 14:50:10 +0100232 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
233 TEST_ASSERT(mbedtls_aria_crypt_ctr(&ctx, src_str->len, &iv_offset,
234 iv_str->x, blk, src_str->x, output)
235 == result);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000236
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100237 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100238 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000239
240exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100241 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000242}
243/* END_CASE */
244
245/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
Gilles Peskine449bd832023-01-11 14:50:10 +0100246void aria_decrypt_ctr(data_t *key_str, data_t *iv_str,
247 data_t *src_str, data_t *expected_output,
248 int result)
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000249{
Manuel Pégourié-Gonnard8abc3492018-03-01 10:02:47 +0100250 unsigned char output[ARIA_MAX_DATASIZE];
251 unsigned char blk[MBEDTLS_ARIA_BLOCKSIZE];
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000252 mbedtls_aria_context ctx;
253 size_t iv_offset = 0;
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000254
Gilles Peskine449bd832023-01-11 14:50:10 +0100255 memset(output, 0x00, sizeof(output));
256 mbedtls_aria_init(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000257
Gilles Peskine449bd832023-01-11 14:50:10 +0100258 mbedtls_aria_setkey_enc(&ctx, key_str->x, key_str->len * 8);
259 TEST_ASSERT(mbedtls_aria_crypt_ctr(&ctx, src_str->len, &iv_offset,
260 iv_str->x, blk, src_str->x, output)
261 == result);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000262
Tom Cosgrovee4e9e7d2023-07-21 11:40:20 +0100263 TEST_MEMORY_COMPARE(output, expected_output->len,
Tom Cosgrove0540fe72023-07-27 14:17:27 +0100264 expected_output->x, expected_output->len);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000265
266exit:
Gilles Peskine449bd832023-01-11 14:50:10 +0100267 mbedtls_aria_free(&ctx);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000268}
269/* END_CASE */
270
271/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
272void aria_selftest()
273{
Gilles Peskine449bd832023-01-11 14:50:10 +0100274 TEST_ASSERT(mbedtls_aria_self_test(1) == 0);
Markku-Juhani O. Saarinen8df81e02017-12-01 14:26:40 +0000275}
276/* END_CASE */