1a8e1175bSopenharmony_ci/* BEGIN_HEADER */
2a8e1175bSopenharmony_ci#include "mbedtls/camellia.h"
3a8e1175bSopenharmony_ci/* END_HEADER */
4a8e1175bSopenharmony_ci
5a8e1175bSopenharmony_ci/* BEGIN_DEPENDENCIES
6a8e1175bSopenharmony_ci * depends_on:MBEDTLS_CAMELLIA_C
7a8e1175bSopenharmony_ci * END_DEPENDENCIES
8a8e1175bSopenharmony_ci */
9a8e1175bSopenharmony_ci
10a8e1175bSopenharmony_ci/* BEGIN_CASE */
11a8e1175bSopenharmony_civoid camellia_invalid_param()
12a8e1175bSopenharmony_ci{
13a8e1175bSopenharmony_ci    mbedtls_camellia_context ctx;
14a8e1175bSopenharmony_ci    unsigned char buf[16] = { 0 };
15a8e1175bSopenharmony_ci    const int invalid_mode = 42;
16a8e1175bSopenharmony_ci    size_t off;
17a8e1175bSopenharmony_ci    ((void) off);
18a8e1175bSopenharmony_ci
19a8e1175bSopenharmony_ci    TEST_EQUAL(MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
20a8e1175bSopenharmony_ci               mbedtls_camellia_crypt_ecb(&ctx,
21a8e1175bSopenharmony_ci                                          invalid_mode,
22a8e1175bSopenharmony_ci                                          buf, buf));
23a8e1175bSopenharmony_ci
24a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_MODE_CBC)
25a8e1175bSopenharmony_ci    TEST_EQUAL(MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
26a8e1175bSopenharmony_ci               mbedtls_camellia_crypt_cbc(&ctx,
27a8e1175bSopenharmony_ci                                          invalid_mode,
28a8e1175bSopenharmony_ci                                          sizeof(buf),
29a8e1175bSopenharmony_ci                                          buf, buf, buf));
30a8e1175bSopenharmony_ci#endif /* MBEDTLS_CIPHER_MODE_CBC */
31a8e1175bSopenharmony_ci
32a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_MODE_CFB)
33a8e1175bSopenharmony_ci    TEST_EQUAL(MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
34a8e1175bSopenharmony_ci               mbedtls_camellia_crypt_cfb128(&ctx,
35a8e1175bSopenharmony_ci                                             invalid_mode,
36a8e1175bSopenharmony_ci                                             sizeof(buf),
37a8e1175bSopenharmony_ci                                             &off, buf,
38a8e1175bSopenharmony_ci                                             buf, buf));
39a8e1175bSopenharmony_ci#endif /* MBEDTLS_CIPHER_MODE_CFB */
40a8e1175bSopenharmony_ci
41a8e1175bSopenharmony_ciexit:
42a8e1175bSopenharmony_ci    return;
43a8e1175bSopenharmony_ci}
44a8e1175bSopenharmony_ci/* END_CASE */
45a8e1175bSopenharmony_ci
46a8e1175bSopenharmony_ci/* BEGIN_CASE */
47a8e1175bSopenharmony_civoid camellia_encrypt_ecb(data_t *key_str, data_t *src_str,
48a8e1175bSopenharmony_ci                          data_t *dst, int setkey_result)
49a8e1175bSopenharmony_ci{
50a8e1175bSopenharmony_ci    unsigned char output[100];
51a8e1175bSopenharmony_ci    mbedtls_camellia_context ctx;
52a8e1175bSopenharmony_ci
53a8e1175bSopenharmony_ci    memset(output, 0x00, 100);
54a8e1175bSopenharmony_ci    mbedtls_camellia_init(&ctx);
55a8e1175bSopenharmony_ci
56a8e1175bSopenharmony_ci
57a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_camellia_setkey_enc(&ctx, key_str->x, key_str->len * 8) == setkey_result);
58a8e1175bSopenharmony_ci    if (setkey_result == 0) {
59a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_camellia_crypt_ecb(&ctx, MBEDTLS_CAMELLIA_ENCRYPT, src_str->x,
60a8e1175bSopenharmony_ci                                               output) == 0);
61a8e1175bSopenharmony_ci
62a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
63a8e1175bSopenharmony_ci    }
64a8e1175bSopenharmony_ci
65a8e1175bSopenharmony_ciexit:
66a8e1175bSopenharmony_ci    mbedtls_camellia_free(&ctx);
67a8e1175bSopenharmony_ci}
68a8e1175bSopenharmony_ci/* END_CASE */
69a8e1175bSopenharmony_ci
70a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:!MBEDTLS_BLOCK_CIPHER_NO_DECRYPT */
71a8e1175bSopenharmony_civoid camellia_decrypt_ecb(data_t *key_str, data_t *src_str,
72a8e1175bSopenharmony_ci                          data_t *dst, int setkey_result)
73a8e1175bSopenharmony_ci{
74a8e1175bSopenharmony_ci    unsigned char output[100];
75a8e1175bSopenharmony_ci    mbedtls_camellia_context ctx;
76a8e1175bSopenharmony_ci
77a8e1175bSopenharmony_ci    memset(output, 0x00, 100);
78a8e1175bSopenharmony_ci    mbedtls_camellia_init(&ctx);
79a8e1175bSopenharmony_ci
80a8e1175bSopenharmony_ci
81a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_camellia_setkey_dec(&ctx, key_str->x, key_str->len * 8) == setkey_result);
82a8e1175bSopenharmony_ci    if (setkey_result == 0) {
83a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_camellia_crypt_ecb(&ctx, MBEDTLS_CAMELLIA_DECRYPT, src_str->x,
84a8e1175bSopenharmony_ci                                               output) == 0);
85a8e1175bSopenharmony_ci
86a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
87a8e1175bSopenharmony_ci    }
88a8e1175bSopenharmony_ci
89a8e1175bSopenharmony_ciexit:
90a8e1175bSopenharmony_ci    mbedtls_camellia_free(&ctx);
91a8e1175bSopenharmony_ci}
92a8e1175bSopenharmony_ci/* END_CASE */
93a8e1175bSopenharmony_ci
94a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
95a8e1175bSopenharmony_civoid camellia_encrypt_cbc(data_t *key_str, data_t *iv_str,
96a8e1175bSopenharmony_ci                          data_t *src_str, data_t *dst, int cbc_result)
97a8e1175bSopenharmony_ci{
98a8e1175bSopenharmony_ci    unsigned char output[100];
99a8e1175bSopenharmony_ci    mbedtls_camellia_context ctx;
100a8e1175bSopenharmony_ci
101a8e1175bSopenharmony_ci    memset(output, 0x00, 100);
102a8e1175bSopenharmony_ci    mbedtls_camellia_init(&ctx);
103a8e1175bSopenharmony_ci
104a8e1175bSopenharmony_ci
105a8e1175bSopenharmony_ci    mbedtls_camellia_setkey_enc(&ctx, key_str->x, key_str->len * 8);
106a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_camellia_crypt_cbc(&ctx, MBEDTLS_CAMELLIA_ENCRYPT, src_str->len, iv_str->x,
107a8e1175bSopenharmony_ci                                           src_str->x, output) == cbc_result);
108a8e1175bSopenharmony_ci    if (cbc_result == 0) {
109a8e1175bSopenharmony_ci
110a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, src_str->len,
111a8e1175bSopenharmony_ci                                        dst->len) == 0);
112a8e1175bSopenharmony_ci    }
113a8e1175bSopenharmony_ci
114a8e1175bSopenharmony_ciexit:
115a8e1175bSopenharmony_ci    mbedtls_camellia_free(&ctx);
116a8e1175bSopenharmony_ci}
117a8e1175bSopenharmony_ci/* END_CASE */
118a8e1175bSopenharmony_ci
119a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
120a8e1175bSopenharmony_civoid camellia_decrypt_cbc(data_t *key_str, data_t *iv_str,
121a8e1175bSopenharmony_ci                          data_t *src_str, data_t *dst,
122a8e1175bSopenharmony_ci                          int cbc_result)
123a8e1175bSopenharmony_ci{
124a8e1175bSopenharmony_ci    unsigned char output[100];
125a8e1175bSopenharmony_ci    mbedtls_camellia_context ctx;
126a8e1175bSopenharmony_ci
127a8e1175bSopenharmony_ci    memset(output, 0x00, 100);
128a8e1175bSopenharmony_ci    mbedtls_camellia_init(&ctx);
129a8e1175bSopenharmony_ci
130a8e1175bSopenharmony_ci
131a8e1175bSopenharmony_ci    mbedtls_camellia_setkey_dec(&ctx, key_str->x, key_str->len * 8);
132a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_camellia_crypt_cbc(&ctx, MBEDTLS_CAMELLIA_DECRYPT, src_str->len, iv_str->x,
133a8e1175bSopenharmony_ci                                           src_str->x, output) == cbc_result);
134a8e1175bSopenharmony_ci    if (cbc_result == 0) {
135a8e1175bSopenharmony_ci
136a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, src_str->len,
137a8e1175bSopenharmony_ci                                        dst->len) == 0);
138a8e1175bSopenharmony_ci    }
139a8e1175bSopenharmony_ci
140a8e1175bSopenharmony_ciexit:
141a8e1175bSopenharmony_ci    mbedtls_camellia_free(&ctx);
142a8e1175bSopenharmony_ci}
143a8e1175bSopenharmony_ci/* END_CASE */
144a8e1175bSopenharmony_ci
145a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
146a8e1175bSopenharmony_civoid camellia_encrypt_cfb128(data_t *key_str, data_t *iv_str,
147a8e1175bSopenharmony_ci                             data_t *src_str, data_t *dst)
148a8e1175bSopenharmony_ci{
149a8e1175bSopenharmony_ci    unsigned char output[100];
150a8e1175bSopenharmony_ci    mbedtls_camellia_context ctx;
151a8e1175bSopenharmony_ci    size_t iv_offset = 0;
152a8e1175bSopenharmony_ci
153a8e1175bSopenharmony_ci    memset(output, 0x00, 100);
154a8e1175bSopenharmony_ci    mbedtls_camellia_init(&ctx);
155a8e1175bSopenharmony_ci
156a8e1175bSopenharmony_ci
157a8e1175bSopenharmony_ci    mbedtls_camellia_setkey_enc(&ctx, key_str->x, key_str->len * 8);
158a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_camellia_crypt_cfb128(&ctx, MBEDTLS_CAMELLIA_ENCRYPT, 16, &iv_offset,
159a8e1175bSopenharmony_ci                                              iv_str->x, src_str->x, output) == 0);
160a8e1175bSopenharmony_ci
161a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
162a8e1175bSopenharmony_ci
163a8e1175bSopenharmony_ciexit:
164a8e1175bSopenharmony_ci    mbedtls_camellia_free(&ctx);
165a8e1175bSopenharmony_ci}
166a8e1175bSopenharmony_ci/* END_CASE */
167a8e1175bSopenharmony_ci
168a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
169a8e1175bSopenharmony_civoid camellia_decrypt_cfb128(data_t *key_str, data_t *iv_str,
170a8e1175bSopenharmony_ci                             data_t *src_str,
171a8e1175bSopenharmony_ci                             data_t *dst)
172a8e1175bSopenharmony_ci{
173a8e1175bSopenharmony_ci    unsigned char output[100];
174a8e1175bSopenharmony_ci    mbedtls_camellia_context ctx;
175a8e1175bSopenharmony_ci    size_t iv_offset = 0;
176a8e1175bSopenharmony_ci
177a8e1175bSopenharmony_ci    memset(output, 0x00, 100);
178a8e1175bSopenharmony_ci    mbedtls_camellia_init(&ctx);
179a8e1175bSopenharmony_ci
180a8e1175bSopenharmony_ci
181a8e1175bSopenharmony_ci    mbedtls_camellia_setkey_enc(&ctx, key_str->x, key_str->len * 8);
182a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_camellia_crypt_cfb128(&ctx, MBEDTLS_CAMELLIA_DECRYPT, 16, &iv_offset,
183a8e1175bSopenharmony_ci                                              iv_str->x, src_str->x, output) == 0);
184a8e1175bSopenharmony_ci
185a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
186a8e1175bSopenharmony_ci
187a8e1175bSopenharmony_ciexit:
188a8e1175bSopenharmony_ci    mbedtls_camellia_free(&ctx);
189a8e1175bSopenharmony_ci}
190a8e1175bSopenharmony_ci/* END_CASE */
191a8e1175bSopenharmony_ci
192a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
193a8e1175bSopenharmony_civoid camellia_selftest()
194a8e1175bSopenharmony_ci{
195a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_camellia_self_test(1) == 0);
196a8e1175bSopenharmony_ci}
197a8e1175bSopenharmony_ci/* END_CASE */
198