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