blob: d2fee22e2bc52daaf4a3582f13dbe9c1dba0f8f6 [file] [log] [blame]
Jens Wiklander817466c2018-05-22 13:49:31 +02001/**
2 * \file cipher_wrap.c
3 *
Tom Van Eyckc1633172024-04-09 18:44:13 +02004 * \brief Generic cipher wrapper for Mbed TLS
Jens Wiklander817466c2018-05-22 13:49:31 +02005 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
7 *
Jerome Forissier79013242021-07-28 10:24:04 +02008 * Copyright The Mbed TLS Contributors
Tom Van Eyckc1633172024-04-09 18:44:13 +02009 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Jens Wiklander817466c2018-05-22 13:49:31 +020010 */
11
Jerome Forissier79013242021-07-28 10:24:04 +020012#include "common.h"
Jens Wiklander817466c2018-05-22 13:49:31 +020013
14#if defined(MBEDTLS_CIPHER_C)
15
Jens Wiklander32b31802023-10-06 16:59:46 +020016#include "cipher_wrap.h"
Jerome Forissier11fa71b2020-04-20 17:17:56 +020017#include "mbedtls/error.h"
Jens Wiklander817466c2018-05-22 13:49:31 +020018
Jens Wiklander3d3b0592019-03-20 15:30:29 +010019#if defined(MBEDTLS_CHACHAPOLY_C)
20#include "mbedtls/chachapoly.h"
21#endif
22
Jens Wiklander817466c2018-05-22 13:49:31 +020023#if defined(MBEDTLS_AES_C)
24#include "mbedtls/aes.h"
25#endif
26
Jens Wiklander817466c2018-05-22 13:49:31 +020027#if defined(MBEDTLS_CAMELLIA_C)
28#include "mbedtls/camellia.h"
29#endif
30
Jens Wiklander3d3b0592019-03-20 15:30:29 +010031#if defined(MBEDTLS_ARIA_C)
32#include "mbedtls/aria.h"
33#endif
34
Jens Wiklander817466c2018-05-22 13:49:31 +020035#if defined(MBEDTLS_DES_C)
36#include "mbedtls/des.h"
37#endif
38
Jens Wiklander3d3b0592019-03-20 15:30:29 +010039#if defined(MBEDTLS_CHACHA20_C)
40#include "mbedtls/chacha20.h"
41#endif
42
Jens Wiklander817466c2018-05-22 13:49:31 +020043#if defined(MBEDTLS_GCM_C)
44#include "mbedtls/gcm.h"
45#endif
46
47#if defined(MBEDTLS_CCM_C)
48#include "mbedtls/ccm.h"
49#endif
50
Jerome Forissier11fa71b2020-04-20 17:17:56 +020051#if defined(MBEDTLS_NIST_KW_C)
52#include "mbedtls/nist_kw.h"
53#endif
54
Jens Wiklander817466c2018-05-22 13:49:31 +020055#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
56#include <string.h>
57#endif
58
Jens Wiklander817466c2018-05-22 13:49:31 +020059#include "mbedtls/platform.h"
Jens Wiklander817466c2018-05-22 13:49:31 +020060
Tom Van Eyckc1633172024-04-09 18:44:13 +020061enum mbedtls_cipher_base_index {
62#if defined(MBEDTLS_AES_C)
63 MBEDTLS_CIPHER_BASE_INDEX_AES,
64#endif
65#if defined(MBEDTLS_ARIA_C)
66 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
67#endif
68#if defined(MBEDTLS_CAMELLIA_C)
69 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
70#endif
71#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
72 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
73#endif
74#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
75 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
76#endif
77#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
78 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
79#endif
80#if defined(MBEDTLS_CHACHA20_C)
81 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
82#endif
83#if defined(MBEDTLS_CHACHAPOLY_C)
84 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
85#endif
86#if defined(MBEDTLS_DES_C)
87 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
88#endif
89#if defined(MBEDTLS_DES_C)
90 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
91#endif
92#if defined(MBEDTLS_DES_C)
93 MBEDTLS_CIPHER_BASE_INDEX_DES,
94#endif
95#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
96 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
97#endif
98#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
99 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
100#endif
101#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
102 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
103#endif
104#if defined(MBEDTLS_NIST_KW_C)
105 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
106#endif
107#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
108 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
109#endif
110#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
111 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
112#endif
113 /* Prevent compile failure due to empty enum */
114 MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
115};
116
117#if defined(MBEDTLS_GCM_C) && \
118 (defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA) || \
119 defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))
Jens Wiklander817466c2018-05-22 13:49:31 +0200120/* shared by all GCM ciphers */
Jens Wiklander32b31802023-10-06 16:59:46 +0200121static void *gcm_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +0200122{
Jens Wiklander32b31802023-10-06 16:59:46 +0200123 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Jens Wiklander817466c2018-05-22 13:49:31 +0200124
Jens Wiklander32b31802023-10-06 16:59:46 +0200125 if (ctx != NULL) {
126 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
127 }
Jens Wiklander817466c2018-05-22 13:49:31 +0200128
Jens Wiklander32b31802023-10-06 16:59:46 +0200129 return ctx;
Jens Wiklander817466c2018-05-22 13:49:31 +0200130}
131
Jens Wiklander32b31802023-10-06 16:59:46 +0200132static void gcm_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +0200133{
Jens Wiklander32b31802023-10-06 16:59:46 +0200134 mbedtls_gcm_free(ctx);
135 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200136}
137#endif /* MBEDTLS_GCM_C */
138
Tom Van Eyckc1633172024-04-09 18:44:13 +0200139#if defined(MBEDTLS_CCM_C) && \
140 (defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA) || \
141 defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))
Jens Wiklander817466c2018-05-22 13:49:31 +0200142/* shared by all CCM ciphers */
Jens Wiklander32b31802023-10-06 16:59:46 +0200143static void *ccm_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +0200144{
Jens Wiklander32b31802023-10-06 16:59:46 +0200145 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Jens Wiklander817466c2018-05-22 13:49:31 +0200146
Jens Wiklander32b31802023-10-06 16:59:46 +0200147 if (ctx != NULL) {
148 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
149 }
Jens Wiklander817466c2018-05-22 13:49:31 +0200150
Jens Wiklander32b31802023-10-06 16:59:46 +0200151 return ctx;
Jens Wiklander817466c2018-05-22 13:49:31 +0200152}
153
Jens Wiklander32b31802023-10-06 16:59:46 +0200154static void ccm_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +0200155{
Jens Wiklander32b31802023-10-06 16:59:46 +0200156 mbedtls_ccm_free(ctx);
157 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200158}
159#endif /* MBEDTLS_CCM_C */
160
161#if defined(MBEDTLS_AES_C)
162
Jens Wiklander32b31802023-10-06 16:59:46 +0200163static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
164 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200165{
Jens Wiklander32b31802023-10-06 16:59:46 +0200166 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200167}
168
169#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +0200170static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
171 unsigned char *iv, const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200172{
Jens Wiklander32b31802023-10-06 16:59:46 +0200173 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
174 output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200175}
176#endif /* MBEDTLS_CIPHER_MODE_CBC */
177
178#if defined(MBEDTLS_CIPHER_MODE_CFB)
Jens Wiklander32b31802023-10-06 16:59:46 +0200179static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
180 size_t length, size_t *iv_off, unsigned char *iv,
181 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200182{
Jens Wiklander32b31802023-10-06 16:59:46 +0200183 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
184 input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200185}
186#endif /* MBEDTLS_CIPHER_MODE_CFB */
187
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100188#if defined(MBEDTLS_CIPHER_MODE_OFB)
Jens Wiklander32b31802023-10-06 16:59:46 +0200189static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
190 unsigned char *iv, const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100191{
Jens Wiklander32b31802023-10-06 16:59:46 +0200192 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
193 iv, input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100194}
195#endif /* MBEDTLS_CIPHER_MODE_OFB */
196
Jens Wiklander817466c2018-05-22 13:49:31 +0200197#if defined(MBEDTLS_CIPHER_MODE_CTR)
Jens Wiklander32b31802023-10-06 16:59:46 +0200198static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
199 unsigned char *nonce_counter, unsigned char *stream_block,
200 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200201{
Jens Wiklander32b31802023-10-06 16:59:46 +0200202 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
203 stream_block, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200204}
205#endif /* MBEDTLS_CIPHER_MODE_CTR */
206
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100207#if defined(MBEDTLS_CIPHER_MODE_XTS)
Jens Wiklander32b31802023-10-06 16:59:46 +0200208static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
209 size_t length,
210 const unsigned char data_unit[16],
211 const unsigned char *input,
212 unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100213{
214 mbedtls_aes_xts_context *xts_ctx = ctx;
215 int mode;
216
Jens Wiklander32b31802023-10-06 16:59:46 +0200217 switch (operation) {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100218 case MBEDTLS_ENCRYPT:
219 mode = MBEDTLS_AES_ENCRYPT;
220 break;
221 case MBEDTLS_DECRYPT:
222 mode = MBEDTLS_AES_DECRYPT;
223 break;
224 default:
225 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
226 }
227
Jens Wiklander32b31802023-10-06 16:59:46 +0200228 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
229 data_unit, input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100230}
231#endif /* MBEDTLS_CIPHER_MODE_XTS */
232
Tom Van Eyckc1633172024-04-09 18:44:13 +0200233#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander32b31802023-10-06 16:59:46 +0200234static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
235 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200236{
Jens Wiklander32b31802023-10-06 16:59:46 +0200237 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200238}
Tom Van Eyckc1633172024-04-09 18:44:13 +0200239#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200240
Jens Wiklander32b31802023-10-06 16:59:46 +0200241static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
242 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200243{
Jens Wiklander32b31802023-10-06 16:59:46 +0200244 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200245}
246
Jens Wiklander32b31802023-10-06 16:59:46 +0200247static void *aes_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +0200248{
Jens Wiklander32b31802023-10-06 16:59:46 +0200249 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Jens Wiklander817466c2018-05-22 13:49:31 +0200250
Jens Wiklander32b31802023-10-06 16:59:46 +0200251 if (aes == NULL) {
252 return NULL;
253 }
Jens Wiklander817466c2018-05-22 13:49:31 +0200254
Jens Wiklander32b31802023-10-06 16:59:46 +0200255 mbedtls_aes_init(aes);
Jens Wiklander817466c2018-05-22 13:49:31 +0200256
Jens Wiklander32b31802023-10-06 16:59:46 +0200257 return aes;
Jens Wiklander817466c2018-05-22 13:49:31 +0200258}
259
Jens Wiklander32b31802023-10-06 16:59:46 +0200260static void aes_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +0200261{
Jens Wiklander32b31802023-10-06 16:59:46 +0200262 mbedtls_aes_free((mbedtls_aes_context *) ctx);
263 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200264}
265
266static const mbedtls_cipher_base_t aes_info = {
267 MBEDTLS_CIPHER_ID_AES,
268 aes_crypt_ecb_wrap,
269#if defined(MBEDTLS_CIPHER_MODE_CBC)
270 aes_crypt_cbc_wrap,
271#endif
272#if defined(MBEDTLS_CIPHER_MODE_CFB)
273 aes_crypt_cfb128_wrap,
274#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100275#if defined(MBEDTLS_CIPHER_MODE_OFB)
276 aes_crypt_ofb_wrap,
277#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200278#if defined(MBEDTLS_CIPHER_MODE_CTR)
279 aes_crypt_ctr_wrap,
280#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100281#if defined(MBEDTLS_CIPHER_MODE_XTS)
282 NULL,
283#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200284#if defined(MBEDTLS_CIPHER_MODE_STREAM)
285 NULL,
286#endif
287 aes_setkey_enc_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200288#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +0200289 aes_setkey_dec_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200290#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200291 aes_ctx_alloc,
292 aes_ctx_free
293};
294
295static const mbedtls_cipher_info_t aes_128_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200296 "AES-128-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200297 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200298 0 >> MBEDTLS_IV_SIZE_SHIFT,
299 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
300 MBEDTLS_MODE_ECB,
301 MBEDTLS_CIPHER_AES_128_ECB,
302 0,
303 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200304};
305
Tom Van Eyckc1633172024-04-09 18:44:13 +0200306#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200307static const mbedtls_cipher_info_t aes_192_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200308 "AES-192-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200309 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200310 0 >> MBEDTLS_IV_SIZE_SHIFT,
311 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
312 MBEDTLS_MODE_ECB,
313 MBEDTLS_CIPHER_AES_192_ECB,
314 0,
315 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200316};
317
318static const mbedtls_cipher_info_t aes_256_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200319 "AES-256-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200320 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200321 0 >> MBEDTLS_IV_SIZE_SHIFT,
322 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
323 MBEDTLS_MODE_ECB,
324 MBEDTLS_CIPHER_AES_256_ECB,
325 0,
326 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200327};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200328#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200329
330#if defined(MBEDTLS_CIPHER_MODE_CBC)
331static const mbedtls_cipher_info_t aes_128_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200332 "AES-128-CBC",
333 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200334 16 >> MBEDTLS_IV_SIZE_SHIFT,
335 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
336 MBEDTLS_MODE_CBC,
337 MBEDTLS_CIPHER_AES_128_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200338 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200339 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200340};
341
Tom Van Eyckc1633172024-04-09 18:44:13 +0200342#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200343static const mbedtls_cipher_info_t aes_192_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200344 "AES-192-CBC",
345 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200346 16 >> MBEDTLS_IV_SIZE_SHIFT,
347 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
348 MBEDTLS_MODE_CBC,
349 MBEDTLS_CIPHER_AES_192_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200350 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200351 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200352};
353
354static const mbedtls_cipher_info_t aes_256_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200355 "AES-256-CBC",
356 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200357 16 >> MBEDTLS_IV_SIZE_SHIFT,
358 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
359 MBEDTLS_MODE_CBC,
360 MBEDTLS_CIPHER_AES_256_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200361 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200362 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200363};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200364#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200365#endif /* MBEDTLS_CIPHER_MODE_CBC */
366
367#if defined(MBEDTLS_CIPHER_MODE_CFB)
368static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200369 "AES-128-CFB128",
370 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200371 16 >> MBEDTLS_IV_SIZE_SHIFT,
372 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
373 MBEDTLS_MODE_CFB,
374 MBEDTLS_CIPHER_AES_128_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200375 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200376 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200377};
378
Tom Van Eyckc1633172024-04-09 18:44:13 +0200379#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200380static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200381 "AES-192-CFB128",
382 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200383 16 >> MBEDTLS_IV_SIZE_SHIFT,
384 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
385 MBEDTLS_MODE_CFB,
386 MBEDTLS_CIPHER_AES_192_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200387 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200388 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200389};
390
391static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200392 "AES-256-CFB128",
393 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200394 16 >> MBEDTLS_IV_SIZE_SHIFT,
395 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
396 MBEDTLS_MODE_CFB,
397 MBEDTLS_CIPHER_AES_256_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200398 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200399 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200400};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200401#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200402#endif /* MBEDTLS_CIPHER_MODE_CFB */
403
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100404#if defined(MBEDTLS_CIPHER_MODE_OFB)
405static const mbedtls_cipher_info_t aes_128_ofb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100406 "AES-128-OFB",
407 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200408 16 >> MBEDTLS_IV_SIZE_SHIFT,
409 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
410 MBEDTLS_MODE_OFB,
411 MBEDTLS_CIPHER_AES_128_OFB,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100412 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200413 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100414};
415
Tom Van Eyckc1633172024-04-09 18:44:13 +0200416#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100417static const mbedtls_cipher_info_t aes_192_ofb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100418 "AES-192-OFB",
419 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200420 16 >> MBEDTLS_IV_SIZE_SHIFT,
421 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
422 MBEDTLS_MODE_OFB,
423 MBEDTLS_CIPHER_AES_192_OFB,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100424 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200425 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100426};
427
428static const mbedtls_cipher_info_t aes_256_ofb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100429 "AES-256-OFB",
430 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200431 16 >> MBEDTLS_IV_SIZE_SHIFT,
432 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
433 MBEDTLS_MODE_OFB,
434 MBEDTLS_CIPHER_AES_256_OFB,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100435 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200436 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100437};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200438#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100439#endif /* MBEDTLS_CIPHER_MODE_OFB */
440
Jens Wiklander817466c2018-05-22 13:49:31 +0200441#if defined(MBEDTLS_CIPHER_MODE_CTR)
442static const mbedtls_cipher_info_t aes_128_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200443 "AES-128-CTR",
444 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200445 16 >> MBEDTLS_IV_SIZE_SHIFT,
446 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
447 MBEDTLS_MODE_CTR,
448 MBEDTLS_CIPHER_AES_128_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +0200449 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200450 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200451};
452
Tom Van Eyckc1633172024-04-09 18:44:13 +0200453#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200454static const mbedtls_cipher_info_t aes_192_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200455 "AES-192-CTR",
456 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200457 16 >> MBEDTLS_IV_SIZE_SHIFT,
458 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
459 MBEDTLS_MODE_CTR,
460 MBEDTLS_CIPHER_AES_192_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +0200461 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200462 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200463};
464
465static const mbedtls_cipher_info_t aes_256_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200466 "AES-256-CTR",
467 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200468 16 >> MBEDTLS_IV_SIZE_SHIFT,
469 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
470 MBEDTLS_MODE_CTR,
471 MBEDTLS_CIPHER_AES_256_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +0200472 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200473 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200474};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200475#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200476#endif /* MBEDTLS_CIPHER_MODE_CTR */
477
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100478#if defined(MBEDTLS_CIPHER_MODE_XTS)
Jens Wiklander32b31802023-10-06 16:59:46 +0200479static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
480 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100481{
482 mbedtls_aes_xts_context *xts_ctx = ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +0200483 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100484}
485
Jens Wiklander32b31802023-10-06 16:59:46 +0200486static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
487 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100488{
489 mbedtls_aes_xts_context *xts_ctx = ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +0200490 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100491}
492
Jens Wiklander32b31802023-10-06 16:59:46 +0200493static void *xts_aes_ctx_alloc(void)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100494{
Jens Wiklander32b31802023-10-06 16:59:46 +0200495 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100496
Jens Wiklander32b31802023-10-06 16:59:46 +0200497 if (xts_ctx != NULL) {
498 mbedtls_aes_xts_init(xts_ctx);
499 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100500
Jens Wiklander32b31802023-10-06 16:59:46 +0200501 return xts_ctx;
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100502}
503
Jens Wiklander32b31802023-10-06 16:59:46 +0200504static void xts_aes_ctx_free(void *ctx)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100505{
506 mbedtls_aes_xts_context *xts_ctx = ctx;
507
Jens Wiklander32b31802023-10-06 16:59:46 +0200508 if (xts_ctx == NULL) {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100509 return;
Jens Wiklander32b31802023-10-06 16:59:46 +0200510 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100511
Jens Wiklander32b31802023-10-06 16:59:46 +0200512 mbedtls_aes_xts_free(xts_ctx);
513 mbedtls_free(xts_ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100514}
515
516static const mbedtls_cipher_base_t xts_aes_info = {
517 MBEDTLS_CIPHER_ID_AES,
518 NULL,
519#if defined(MBEDTLS_CIPHER_MODE_CBC)
520 NULL,
521#endif
522#if defined(MBEDTLS_CIPHER_MODE_CFB)
523 NULL,
524#endif
525#if defined(MBEDTLS_CIPHER_MODE_OFB)
526 NULL,
527#endif
528#if defined(MBEDTLS_CIPHER_MODE_CTR)
529 NULL,
530#endif
531#if defined(MBEDTLS_CIPHER_MODE_XTS)
532 aes_crypt_xts_wrap,
533#endif
534#if defined(MBEDTLS_CIPHER_MODE_STREAM)
535 NULL,
536#endif
537 xts_aes_setkey_enc_wrap,
538 xts_aes_setkey_dec_wrap,
539 xts_aes_ctx_alloc,
540 xts_aes_ctx_free
541};
542
543static const mbedtls_cipher_info_t aes_128_xts_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100544 "AES-128-XTS",
545 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200546 16 >> MBEDTLS_IV_SIZE_SHIFT,
547 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
548 MBEDTLS_MODE_XTS,
549 MBEDTLS_CIPHER_AES_128_XTS,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100550 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200551 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100552};
553
Tom Van Eyckc1633172024-04-09 18:44:13 +0200554#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100555static const mbedtls_cipher_info_t aes_256_xts_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100556 "AES-256-XTS",
557 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200558 16 >> MBEDTLS_IV_SIZE_SHIFT,
559 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
560 MBEDTLS_MODE_XTS,
561 MBEDTLS_CIPHER_AES_256_XTS,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100562 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200563 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100564};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200565#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100566#endif /* MBEDTLS_CIPHER_MODE_XTS */
Tom Van Eyckc1633172024-04-09 18:44:13 +0200567#endif /* MBEDTLS_AES_C */
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100568
Tom Van Eyckc1633172024-04-09 18:44:13 +0200569#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)
Jens Wiklander32b31802023-10-06 16:59:46 +0200570static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
571 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200572{
Jens Wiklander32b31802023-10-06 16:59:46 +0200573 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
574 key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200575}
Tom Van Eyckc1633172024-04-09 18:44:13 +0200576#endif /* MBEDTLS_GCM_C && MBEDTLS_CCM_GCM_CAN_AES */
Jens Wiklander817466c2018-05-22 13:49:31 +0200577
Tom Van Eyckc1633172024-04-09 18:44:13 +0200578#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +0200579static const mbedtls_cipher_base_t gcm_aes_info = {
580 MBEDTLS_CIPHER_ID_AES,
581 NULL,
582#if defined(MBEDTLS_CIPHER_MODE_CBC)
583 NULL,
584#endif
585#if defined(MBEDTLS_CIPHER_MODE_CFB)
586 NULL,
587#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100588#if defined(MBEDTLS_CIPHER_MODE_OFB)
589 NULL,
590#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200591#if defined(MBEDTLS_CIPHER_MODE_CTR)
592 NULL,
593#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100594#if defined(MBEDTLS_CIPHER_MODE_XTS)
595 NULL,
596#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200597#if defined(MBEDTLS_CIPHER_MODE_STREAM)
598 NULL,
599#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +0200600#if defined(MBEDTLS_GCM_C)
Jens Wiklander817466c2018-05-22 13:49:31 +0200601 gcm_aes_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200602#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +0200603 gcm_aes_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200604#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200605 gcm_ctx_alloc,
606 gcm_ctx_free,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200607#else
608 NULL,
609 NULL,
610 NULL,
611 NULL,
612#endif /* MBEDTLS_GCM_C */
Jens Wiklander817466c2018-05-22 13:49:31 +0200613};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200614#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander817466c2018-05-22 13:49:31 +0200615
Tom Van Eyckc1633172024-04-09 18:44:13 +0200616#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +0200617static const mbedtls_cipher_info_t aes_128_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200618 "AES-128-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200619 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200620 12 >> MBEDTLS_IV_SIZE_SHIFT,
621 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
622 MBEDTLS_MODE_GCM,
623 MBEDTLS_CIPHER_AES_128_GCM,
624 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
625 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200626};
627
Tom Van Eyckc1633172024-04-09 18:44:13 +0200628#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200629static const mbedtls_cipher_info_t aes_192_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200630 "AES-192-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200631 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200632 12 >> MBEDTLS_IV_SIZE_SHIFT,
633 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
634 MBEDTLS_MODE_GCM,
635 MBEDTLS_CIPHER_AES_192_GCM,
636 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
637 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200638};
639
640static const mbedtls_cipher_info_t aes_256_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200641 "AES-256-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200642 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200643 12 >> MBEDTLS_IV_SIZE_SHIFT,
644 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
645 MBEDTLS_MODE_GCM,
646 MBEDTLS_CIPHER_AES_256_GCM,
647 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
648 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200649};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200650#endif
651#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander817466c2018-05-22 13:49:31 +0200652
Tom Van Eyckc1633172024-04-09 18:44:13 +0200653#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)
Jens Wiklander32b31802023-10-06 16:59:46 +0200654static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
655 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200656{
Jens Wiklander32b31802023-10-06 16:59:46 +0200657 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
658 key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200659}
Tom Van Eyckc1633172024-04-09 18:44:13 +0200660#endif /* MBEDTLS_CCM_C && MBEDTLS_CCM_GCM_CAN_AES */
Jens Wiklander817466c2018-05-22 13:49:31 +0200661
Tom Van Eyckc1633172024-04-09 18:44:13 +0200662#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +0200663static const mbedtls_cipher_base_t ccm_aes_info = {
664 MBEDTLS_CIPHER_ID_AES,
665 NULL,
666#if defined(MBEDTLS_CIPHER_MODE_CBC)
667 NULL,
668#endif
669#if defined(MBEDTLS_CIPHER_MODE_CFB)
670 NULL,
671#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100672#if defined(MBEDTLS_CIPHER_MODE_OFB)
673 NULL,
674#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200675#if defined(MBEDTLS_CIPHER_MODE_CTR)
676 NULL,
677#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100678#if defined(MBEDTLS_CIPHER_MODE_XTS)
679 NULL,
680#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200681#if defined(MBEDTLS_CIPHER_MODE_STREAM)
682 NULL,
683#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +0200684#if defined(MBEDTLS_CCM_C)
Jens Wiklander817466c2018-05-22 13:49:31 +0200685 ccm_aes_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200686#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +0200687 ccm_aes_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200688#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200689 ccm_ctx_alloc,
690 ccm_ctx_free,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200691#else
692 NULL,
693 NULL,
694 NULL,
695 NULL,
696#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200697};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200698#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander817466c2018-05-22 13:49:31 +0200699
Tom Van Eyckc1633172024-04-09 18:44:13 +0200700#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +0200701static const mbedtls_cipher_info_t aes_128_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200702 "AES-128-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200703 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200704 12 >> MBEDTLS_IV_SIZE_SHIFT,
705 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
706 MBEDTLS_MODE_CCM,
707 MBEDTLS_CIPHER_AES_128_CCM,
708 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
709 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200710};
711
Tom Van Eyckc1633172024-04-09 18:44:13 +0200712#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200713static const mbedtls_cipher_info_t aes_192_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200714 "AES-192-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200715 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200716 12 >> MBEDTLS_IV_SIZE_SHIFT,
717 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
718 MBEDTLS_MODE_CCM,
719 MBEDTLS_CIPHER_AES_192_CCM,
720 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
721 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200722};
723
724static const mbedtls_cipher_info_t aes_256_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200725 "AES-256-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200726 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200727 12 >> MBEDTLS_IV_SIZE_SHIFT,
728 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
729 MBEDTLS_MODE_CCM,
730 MBEDTLS_CIPHER_AES_256_CCM,
731 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
732 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200733};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200734#endif
735#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander32b31802023-10-06 16:59:46 +0200736
Tom Van Eyckc1633172024-04-09 18:44:13 +0200737#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander32b31802023-10-06 16:59:46 +0200738static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +0200739 "AES-128-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +0200740 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200741 12 >> MBEDTLS_IV_SIZE_SHIFT,
742 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
743 MBEDTLS_MODE_CCM_STAR_NO_TAG,
744 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
745 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
746 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander32b31802023-10-06 16:59:46 +0200747};
748
Tom Van Eyckc1633172024-04-09 18:44:13 +0200749#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander32b31802023-10-06 16:59:46 +0200750static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +0200751 "AES-192-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +0200752 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200753 12 >> MBEDTLS_IV_SIZE_SHIFT,
754 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
755 MBEDTLS_MODE_CCM_STAR_NO_TAG,
756 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
757 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
758 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander32b31802023-10-06 16:59:46 +0200759};
760
761static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +0200762 "AES-256-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +0200763 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200764 12 >> MBEDTLS_IV_SIZE_SHIFT,
765 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
766 MBEDTLS_MODE_CCM_STAR_NO_TAG,
767 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
768 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
769 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander32b31802023-10-06 16:59:46 +0200770};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200771#endif
772#endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander817466c2018-05-22 13:49:31 +0200773
Jens Wiklander817466c2018-05-22 13:49:31 +0200774
775#if defined(MBEDTLS_CAMELLIA_C)
776
Jens Wiklander32b31802023-10-06 16:59:46 +0200777static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
778 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200779{
Jens Wiklander32b31802023-10-06 16:59:46 +0200780 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
781 output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200782}
783
784#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +0200785static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
786 size_t length, unsigned char *iv,
787 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200788{
Jens Wiklander32b31802023-10-06 16:59:46 +0200789 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
790 input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200791}
792#endif /* MBEDTLS_CIPHER_MODE_CBC */
793
794#if defined(MBEDTLS_CIPHER_MODE_CFB)
Jens Wiklander32b31802023-10-06 16:59:46 +0200795static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
796 size_t length, size_t *iv_off, unsigned char *iv,
797 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200798{
Jens Wiklander32b31802023-10-06 16:59:46 +0200799 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
800 iv_off, iv, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200801}
802#endif /* MBEDTLS_CIPHER_MODE_CFB */
803
804#if defined(MBEDTLS_CIPHER_MODE_CTR)
Jens Wiklander32b31802023-10-06 16:59:46 +0200805static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
806 unsigned char *nonce_counter, unsigned char *stream_block,
807 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200808{
Jens Wiklander32b31802023-10-06 16:59:46 +0200809 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
810 nonce_counter, stream_block, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200811}
812#endif /* MBEDTLS_CIPHER_MODE_CTR */
813
Tom Van Eyckc1633172024-04-09 18:44:13 +0200814#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander32b31802023-10-06 16:59:46 +0200815static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
816 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200817{
Jens Wiklander32b31802023-10-06 16:59:46 +0200818 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200819}
Tom Van Eyckc1633172024-04-09 18:44:13 +0200820#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200821
Jens Wiklander32b31802023-10-06 16:59:46 +0200822static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
823 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200824{
Jens Wiklander32b31802023-10-06 16:59:46 +0200825 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200826}
827
Jens Wiklander32b31802023-10-06 16:59:46 +0200828static void *camellia_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +0200829{
830 mbedtls_camellia_context *ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +0200831 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Jens Wiklander817466c2018-05-22 13:49:31 +0200832
Jens Wiklander32b31802023-10-06 16:59:46 +0200833 if (ctx == NULL) {
834 return NULL;
835 }
Jens Wiklander817466c2018-05-22 13:49:31 +0200836
Jens Wiklander32b31802023-10-06 16:59:46 +0200837 mbedtls_camellia_init(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200838
Jens Wiklander32b31802023-10-06 16:59:46 +0200839 return ctx;
Jens Wiklander817466c2018-05-22 13:49:31 +0200840}
841
Jens Wiklander32b31802023-10-06 16:59:46 +0200842static void camellia_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +0200843{
Jens Wiklander32b31802023-10-06 16:59:46 +0200844 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
845 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200846}
847
848static const mbedtls_cipher_base_t camellia_info = {
849 MBEDTLS_CIPHER_ID_CAMELLIA,
850 camellia_crypt_ecb_wrap,
851#if defined(MBEDTLS_CIPHER_MODE_CBC)
852 camellia_crypt_cbc_wrap,
853#endif
854#if defined(MBEDTLS_CIPHER_MODE_CFB)
855 camellia_crypt_cfb128_wrap,
856#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100857#if defined(MBEDTLS_CIPHER_MODE_OFB)
858 NULL,
859#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200860#if defined(MBEDTLS_CIPHER_MODE_CTR)
861 camellia_crypt_ctr_wrap,
862#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100863#if defined(MBEDTLS_CIPHER_MODE_XTS)
864 NULL,
865#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200866#if defined(MBEDTLS_CIPHER_MODE_STREAM)
867 NULL,
868#endif
869 camellia_setkey_enc_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200870#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +0200871 camellia_setkey_dec_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200872#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200873 camellia_ctx_alloc,
874 camellia_ctx_free
875};
876
877static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200878 "CAMELLIA-128-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200879 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200880 0 >> MBEDTLS_IV_SIZE_SHIFT,
881 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
882 MBEDTLS_MODE_ECB,
883 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
884 0,
885 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200886};
887
888static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200889 "CAMELLIA-192-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200890 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200891 0 >> MBEDTLS_IV_SIZE_SHIFT,
892 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
893 MBEDTLS_MODE_ECB,
894 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
895 0,
896 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200897};
898
899static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200900 "CAMELLIA-256-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200901 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200902 0 >> MBEDTLS_IV_SIZE_SHIFT,
903 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
904 MBEDTLS_MODE_ECB,
905 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
906 0,
907 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200908};
909
910#if defined(MBEDTLS_CIPHER_MODE_CBC)
911static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200912 "CAMELLIA-128-CBC",
913 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200914 16 >> MBEDTLS_IV_SIZE_SHIFT,
915 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
916 MBEDTLS_MODE_CBC,
917 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200918 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200919 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200920};
921
922static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200923 "CAMELLIA-192-CBC",
924 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200925 16 >> MBEDTLS_IV_SIZE_SHIFT,
926 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
927 MBEDTLS_MODE_CBC,
928 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200929 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200930 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200931};
932
933static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200934 "CAMELLIA-256-CBC",
935 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200936 16 >> MBEDTLS_IV_SIZE_SHIFT,
937 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
938 MBEDTLS_MODE_CBC,
939 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200940 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200941 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200942};
943#endif /* MBEDTLS_CIPHER_MODE_CBC */
944
945#if defined(MBEDTLS_CIPHER_MODE_CFB)
946static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200947 "CAMELLIA-128-CFB128",
948 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200949 16 >> MBEDTLS_IV_SIZE_SHIFT,
950 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
951 MBEDTLS_MODE_CFB,
952 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200953 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200954 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200955};
956
957static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200958 "CAMELLIA-192-CFB128",
959 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200960 16 >> MBEDTLS_IV_SIZE_SHIFT,
961 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
962 MBEDTLS_MODE_CFB,
963 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200964 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200965 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200966};
967
968static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200969 "CAMELLIA-256-CFB128",
970 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200971 16 >> MBEDTLS_IV_SIZE_SHIFT,
972 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
973 MBEDTLS_MODE_CFB,
974 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200975 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200976 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200977};
978#endif /* MBEDTLS_CIPHER_MODE_CFB */
979
980#if defined(MBEDTLS_CIPHER_MODE_CTR)
981static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200982 "CAMELLIA-128-CTR",
983 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200984 16 >> MBEDTLS_IV_SIZE_SHIFT,
985 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
986 MBEDTLS_MODE_CTR,
987 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +0200988 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200989 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200990};
991
992static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200993 "CAMELLIA-192-CTR",
994 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200995 16 >> MBEDTLS_IV_SIZE_SHIFT,
996 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
997 MBEDTLS_MODE_CTR,
998 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +0200999 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001000 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001001};
1002
1003static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001004 "CAMELLIA-256-CTR",
1005 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001006 16 >> MBEDTLS_IV_SIZE_SHIFT,
1007 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1008 MBEDTLS_MODE_CTR,
1009 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +02001010 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001011 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001012};
1013#endif /* MBEDTLS_CIPHER_MODE_CTR */
1014
1015#if defined(MBEDTLS_GCM_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02001016static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1017 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001018{
Jens Wiklander32b31802023-10-06 16:59:46 +02001019 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1020 key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +02001021}
1022
1023static const mbedtls_cipher_base_t gcm_camellia_info = {
1024 MBEDTLS_CIPHER_ID_CAMELLIA,
1025 NULL,
1026#if defined(MBEDTLS_CIPHER_MODE_CBC)
1027 NULL,
1028#endif
1029#if defined(MBEDTLS_CIPHER_MODE_CFB)
1030 NULL,
1031#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001032#if defined(MBEDTLS_CIPHER_MODE_OFB)
1033 NULL,
1034#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001035#if defined(MBEDTLS_CIPHER_MODE_CTR)
1036 NULL,
1037#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001038#if defined(MBEDTLS_CIPHER_MODE_XTS)
1039 NULL,
1040#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001041#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1042 NULL,
1043#endif
1044 gcm_camellia_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001045#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +02001046 gcm_camellia_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001047#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001048 gcm_ctx_alloc,
1049 gcm_ctx_free,
1050};
1051
1052static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001053 "CAMELLIA-128-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001054 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001055 12 >> MBEDTLS_IV_SIZE_SHIFT,
1056 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1057 MBEDTLS_MODE_GCM,
1058 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
1059 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1060 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001061};
1062
1063static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001064 "CAMELLIA-192-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001065 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001066 12 >> MBEDTLS_IV_SIZE_SHIFT,
1067 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1068 MBEDTLS_MODE_GCM,
1069 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
1070 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1071 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001072};
1073
1074static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001075 "CAMELLIA-256-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001076 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001077 12 >> MBEDTLS_IV_SIZE_SHIFT,
1078 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1079 MBEDTLS_MODE_GCM,
1080 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
1081 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1082 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001083};
1084#endif /* MBEDTLS_GCM_C */
1085
1086#if defined(MBEDTLS_CCM_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02001087static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1088 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001089{
Jens Wiklander32b31802023-10-06 16:59:46 +02001090 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1091 key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +02001092}
1093
1094static const mbedtls_cipher_base_t ccm_camellia_info = {
1095 MBEDTLS_CIPHER_ID_CAMELLIA,
1096 NULL,
1097#if defined(MBEDTLS_CIPHER_MODE_CBC)
1098 NULL,
1099#endif
1100#if defined(MBEDTLS_CIPHER_MODE_CFB)
1101 NULL,
1102#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001103#if defined(MBEDTLS_CIPHER_MODE_OFB)
1104 NULL,
1105#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001106#if defined(MBEDTLS_CIPHER_MODE_CTR)
1107 NULL,
1108#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001109#if defined(MBEDTLS_CIPHER_MODE_XTS)
1110 NULL,
1111#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001112#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1113 NULL,
1114#endif
1115 ccm_camellia_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001116#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +02001117 ccm_camellia_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001118#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001119 ccm_ctx_alloc,
1120 ccm_ctx_free,
1121};
1122
1123static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001124 "CAMELLIA-128-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001125 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001126 12 >> MBEDTLS_IV_SIZE_SHIFT,
1127 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1128 MBEDTLS_MODE_CCM,
1129 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
1130 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1131 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001132};
1133
1134static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001135 "CAMELLIA-192-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001136 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001137 12 >> MBEDTLS_IV_SIZE_SHIFT,
1138 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1139 MBEDTLS_MODE_CCM,
1140 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
1141 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1142 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001143};
1144
1145static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001146 "CAMELLIA-256-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001147 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001148 12 >> MBEDTLS_IV_SIZE_SHIFT,
1149 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1150 MBEDTLS_MODE_CCM,
1151 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
1152 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1153 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001154};
Jens Wiklander32b31802023-10-06 16:59:46 +02001155
1156static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001157 "CAMELLIA-128-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001158 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001159 12 >> MBEDTLS_IV_SIZE_SHIFT,
1160 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1161 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1162 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
1163 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1164 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001165};
1166
1167static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001168 "CAMELLIA-192-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001169 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001170 12 >> MBEDTLS_IV_SIZE_SHIFT,
1171 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1172 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1173 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
1174 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1175 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001176};
1177
1178static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001179 "CAMELLIA-256-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001180 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001181 12 >> MBEDTLS_IV_SIZE_SHIFT,
1182 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1183 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1184 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
1185 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1186 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001187};
Jens Wiklander817466c2018-05-22 13:49:31 +02001188#endif /* MBEDTLS_CCM_C */
1189
1190#endif /* MBEDTLS_CAMELLIA_C */
1191
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001192#if defined(MBEDTLS_ARIA_C)
1193
Jens Wiklander32b31802023-10-06 16:59:46 +02001194static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1195 const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001196{
1197 (void) operation;
Jens Wiklander32b31802023-10-06 16:59:46 +02001198 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1199 output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001200}
1201
1202#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +02001203static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1204 size_t length, unsigned char *iv,
1205 const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001206{
Jens Wiklander32b31802023-10-06 16:59:46 +02001207 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1208 input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001209}
1210#endif /* MBEDTLS_CIPHER_MODE_CBC */
1211
1212#if defined(MBEDTLS_CIPHER_MODE_CFB)
Jens Wiklander32b31802023-10-06 16:59:46 +02001213static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1214 size_t length, size_t *iv_off, unsigned char *iv,
1215 const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001216{
Jens Wiklander32b31802023-10-06 16:59:46 +02001217 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1218 iv_off, iv, input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001219}
1220#endif /* MBEDTLS_CIPHER_MODE_CFB */
1221
1222#if defined(MBEDTLS_CIPHER_MODE_CTR)
Jens Wiklander32b31802023-10-06 16:59:46 +02001223static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1224 unsigned char *nonce_counter, unsigned char *stream_block,
1225 const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001226{
Jens Wiklander32b31802023-10-06 16:59:46 +02001227 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1228 nonce_counter, stream_block, input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001229}
1230#endif /* MBEDTLS_CIPHER_MODE_CTR */
1231
Tom Van Eyckc1633172024-04-09 18:44:13 +02001232#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander32b31802023-10-06 16:59:46 +02001233static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1234 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001235{
Jens Wiklander32b31802023-10-06 16:59:46 +02001236 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001237}
Tom Van Eyckc1633172024-04-09 18:44:13 +02001238#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001239
Jens Wiklander32b31802023-10-06 16:59:46 +02001240static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1241 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001242{
Jens Wiklander32b31802023-10-06 16:59:46 +02001243 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001244}
1245
Jens Wiklander32b31802023-10-06 16:59:46 +02001246static void *aria_ctx_alloc(void)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001247{
1248 mbedtls_aria_context *ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +02001249 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001250
Jens Wiklander32b31802023-10-06 16:59:46 +02001251 if (ctx == NULL) {
1252 return NULL;
1253 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001254
Jens Wiklander32b31802023-10-06 16:59:46 +02001255 mbedtls_aria_init(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001256
Jens Wiklander32b31802023-10-06 16:59:46 +02001257 return ctx;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001258}
1259
Jens Wiklander32b31802023-10-06 16:59:46 +02001260static void aria_ctx_free(void *ctx)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001261{
Jens Wiklander32b31802023-10-06 16:59:46 +02001262 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1263 mbedtls_free(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001264}
1265
1266static const mbedtls_cipher_base_t aria_info = {
1267 MBEDTLS_CIPHER_ID_ARIA,
1268 aria_crypt_ecb_wrap,
1269#if defined(MBEDTLS_CIPHER_MODE_CBC)
1270 aria_crypt_cbc_wrap,
1271#endif
1272#if defined(MBEDTLS_CIPHER_MODE_CFB)
1273 aria_crypt_cfb128_wrap,
1274#endif
1275#if defined(MBEDTLS_CIPHER_MODE_OFB)
1276 NULL,
1277#endif
1278#if defined(MBEDTLS_CIPHER_MODE_CTR)
1279 aria_crypt_ctr_wrap,
1280#endif
1281#if defined(MBEDTLS_CIPHER_MODE_XTS)
1282 NULL,
1283#endif
1284#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1285 NULL,
1286#endif
1287 aria_setkey_enc_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001288#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001289 aria_setkey_dec_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001290#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001291 aria_ctx_alloc,
1292 aria_ctx_free
1293};
1294
1295static const mbedtls_cipher_info_t aria_128_ecb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001296 "ARIA-128-ECB",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001297 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001298 0 >> MBEDTLS_IV_SIZE_SHIFT,
1299 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1300 MBEDTLS_MODE_ECB,
1301 MBEDTLS_CIPHER_ARIA_128_ECB,
1302 0,
1303 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001304};
1305
1306static const mbedtls_cipher_info_t aria_192_ecb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001307 "ARIA-192-ECB",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001308 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001309 0 >> MBEDTLS_IV_SIZE_SHIFT,
1310 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1311 MBEDTLS_MODE_ECB,
1312 MBEDTLS_CIPHER_ARIA_192_ECB,
1313 0,
1314 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001315};
1316
1317static const mbedtls_cipher_info_t aria_256_ecb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001318 "ARIA-256-ECB",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001319 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001320 0 >> MBEDTLS_IV_SIZE_SHIFT,
1321 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1322 MBEDTLS_MODE_ECB,
1323 MBEDTLS_CIPHER_ARIA_256_ECB,
1324 0,
1325 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001326};
1327
1328#if defined(MBEDTLS_CIPHER_MODE_CBC)
1329static const mbedtls_cipher_info_t aria_128_cbc_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001330 "ARIA-128-CBC",
1331 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001332 16 >> MBEDTLS_IV_SIZE_SHIFT,
1333 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1334 MBEDTLS_MODE_CBC,
1335 MBEDTLS_CIPHER_ARIA_128_CBC,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001336 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001337 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001338};
1339
1340static const mbedtls_cipher_info_t aria_192_cbc_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001341 "ARIA-192-CBC",
1342 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001343 16 >> MBEDTLS_IV_SIZE_SHIFT,
1344 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1345 MBEDTLS_MODE_CBC,
1346 MBEDTLS_CIPHER_ARIA_192_CBC,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001347 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001348 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001349};
1350
1351static const mbedtls_cipher_info_t aria_256_cbc_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001352 "ARIA-256-CBC",
1353 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001354 16 >> MBEDTLS_IV_SIZE_SHIFT,
1355 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1356 MBEDTLS_MODE_CBC,
1357 MBEDTLS_CIPHER_ARIA_256_CBC,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001358 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001359 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001360};
1361#endif /* MBEDTLS_CIPHER_MODE_CBC */
1362
1363#if defined(MBEDTLS_CIPHER_MODE_CFB)
1364static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001365 "ARIA-128-CFB128",
1366 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001367 16 >> MBEDTLS_IV_SIZE_SHIFT,
1368 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1369 MBEDTLS_MODE_CFB,
1370 MBEDTLS_CIPHER_ARIA_128_CFB128,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001371 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001372 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001373};
1374
1375static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001376 "ARIA-192-CFB128",
1377 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001378 16 >> MBEDTLS_IV_SIZE_SHIFT,
1379 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1380 MBEDTLS_MODE_CFB,
1381 MBEDTLS_CIPHER_ARIA_192_CFB128,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001382 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001383 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001384};
1385
1386static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001387 "ARIA-256-CFB128",
1388 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001389 16 >> MBEDTLS_IV_SIZE_SHIFT,
1390 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1391 MBEDTLS_MODE_CFB,
1392 MBEDTLS_CIPHER_ARIA_256_CFB128,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001393 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001394 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001395};
1396#endif /* MBEDTLS_CIPHER_MODE_CFB */
1397
1398#if defined(MBEDTLS_CIPHER_MODE_CTR)
1399static const mbedtls_cipher_info_t aria_128_ctr_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001400 "ARIA-128-CTR",
1401 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001402 16 >> MBEDTLS_IV_SIZE_SHIFT,
1403 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1404 MBEDTLS_MODE_CTR,
1405 MBEDTLS_CIPHER_ARIA_128_CTR,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001406 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001407 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001408};
1409
1410static const mbedtls_cipher_info_t aria_192_ctr_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001411 "ARIA-192-CTR",
1412 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001413 16 >> MBEDTLS_IV_SIZE_SHIFT,
1414 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1415 MBEDTLS_MODE_CTR,
1416 MBEDTLS_CIPHER_ARIA_192_CTR,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001417 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001418 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001419};
1420
1421static const mbedtls_cipher_info_t aria_256_ctr_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001422 "ARIA-256-CTR",
1423 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001424 16 >> MBEDTLS_IV_SIZE_SHIFT,
1425 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1426 MBEDTLS_MODE_CTR,
1427 MBEDTLS_CIPHER_ARIA_256_CTR,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001428 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001429 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001430};
1431#endif /* MBEDTLS_CIPHER_MODE_CTR */
1432
1433#if defined(MBEDTLS_GCM_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02001434static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1435 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001436{
Jens Wiklander32b31802023-10-06 16:59:46 +02001437 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1438 key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001439}
1440
1441static const mbedtls_cipher_base_t gcm_aria_info = {
1442 MBEDTLS_CIPHER_ID_ARIA,
1443 NULL,
1444#if defined(MBEDTLS_CIPHER_MODE_CBC)
1445 NULL,
1446#endif
1447#if defined(MBEDTLS_CIPHER_MODE_CFB)
1448 NULL,
1449#endif
1450#if defined(MBEDTLS_CIPHER_MODE_OFB)
1451 NULL,
1452#endif
1453#if defined(MBEDTLS_CIPHER_MODE_CTR)
1454 NULL,
1455#endif
1456#if defined(MBEDTLS_CIPHER_MODE_XTS)
1457 NULL,
1458#endif
1459#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1460 NULL,
1461#endif
1462 gcm_aria_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001463#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001464 gcm_aria_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001465#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001466 gcm_ctx_alloc,
1467 gcm_ctx_free,
1468};
1469
1470static const mbedtls_cipher_info_t aria_128_gcm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001471 "ARIA-128-GCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001472 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001473 12 >> MBEDTLS_IV_SIZE_SHIFT,
1474 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1475 MBEDTLS_MODE_GCM,
1476 MBEDTLS_CIPHER_ARIA_128_GCM,
1477 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1478 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001479};
1480
1481static const mbedtls_cipher_info_t aria_192_gcm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001482 "ARIA-192-GCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001483 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001484 12 >> MBEDTLS_IV_SIZE_SHIFT,
1485 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1486 MBEDTLS_MODE_GCM,
1487 MBEDTLS_CIPHER_ARIA_192_GCM,
1488 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1489 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001490};
1491
1492static const mbedtls_cipher_info_t aria_256_gcm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001493 "ARIA-256-GCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001494 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001495 12 >> MBEDTLS_IV_SIZE_SHIFT,
1496 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1497 MBEDTLS_MODE_GCM,
1498 MBEDTLS_CIPHER_ARIA_256_GCM,
1499 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1500 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001501};
1502#endif /* MBEDTLS_GCM_C */
1503
1504#if defined(MBEDTLS_CCM_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02001505static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1506 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001507{
Jens Wiklander32b31802023-10-06 16:59:46 +02001508 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1509 key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001510}
1511
1512static const mbedtls_cipher_base_t ccm_aria_info = {
1513 MBEDTLS_CIPHER_ID_ARIA,
1514 NULL,
1515#if defined(MBEDTLS_CIPHER_MODE_CBC)
1516 NULL,
1517#endif
1518#if defined(MBEDTLS_CIPHER_MODE_CFB)
1519 NULL,
1520#endif
1521#if defined(MBEDTLS_CIPHER_MODE_OFB)
1522 NULL,
1523#endif
1524#if defined(MBEDTLS_CIPHER_MODE_CTR)
1525 NULL,
1526#endif
1527#if defined(MBEDTLS_CIPHER_MODE_XTS)
1528 NULL,
1529#endif
1530#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1531 NULL,
1532#endif
1533 ccm_aria_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001534#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001535 ccm_aria_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001536#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001537 ccm_ctx_alloc,
1538 ccm_ctx_free,
1539};
1540
1541static const mbedtls_cipher_info_t aria_128_ccm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001542 "ARIA-128-CCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001543 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001544 12 >> MBEDTLS_IV_SIZE_SHIFT,
1545 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1546 MBEDTLS_MODE_CCM,
1547 MBEDTLS_CIPHER_ARIA_128_CCM,
1548 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1549 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001550};
1551
1552static const mbedtls_cipher_info_t aria_192_ccm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001553 "ARIA-192-CCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001554 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001555 12 >> MBEDTLS_IV_SIZE_SHIFT,
1556 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1557 MBEDTLS_MODE_CCM,
1558 MBEDTLS_CIPHER_ARIA_192_CCM,
1559 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1560 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001561};
1562
1563static const mbedtls_cipher_info_t aria_256_ccm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001564 "ARIA-256-CCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001565 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001566 12 >> MBEDTLS_IV_SIZE_SHIFT,
1567 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1568 MBEDTLS_MODE_CCM,
1569 MBEDTLS_CIPHER_ARIA_256_CCM,
1570 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1571 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001572};
Jens Wiklander32b31802023-10-06 16:59:46 +02001573
1574static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001575 "ARIA-128-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001576 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001577 12 >> MBEDTLS_IV_SIZE_SHIFT,
1578 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1579 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1580 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
1581 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1582 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001583};
1584
1585static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001586 "ARIA-192-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001587 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001588 12 >> MBEDTLS_IV_SIZE_SHIFT,
1589 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1590 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1591 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
1592 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1593 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001594};
1595
1596static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001597 "ARIA-256-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001598 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001599 12 >> MBEDTLS_IV_SIZE_SHIFT,
1600 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1601 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1602 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
1603 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1604 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001605};
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001606#endif /* MBEDTLS_CCM_C */
1607
1608#endif /* MBEDTLS_ARIA_C */
1609
Jens Wiklander817466c2018-05-22 13:49:31 +02001610#if defined(MBEDTLS_DES_C)
1611
Jens Wiklander32b31802023-10-06 16:59:46 +02001612static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1613 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02001614{
1615 ((void) operation);
Jens Wiklander32b31802023-10-06 16:59:46 +02001616 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +02001617}
1618
Jens Wiklander32b31802023-10-06 16:59:46 +02001619static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1620 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02001621{
1622 ((void) operation);
Jens Wiklander32b31802023-10-06 16:59:46 +02001623 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +02001624}
1625
1626#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +02001627static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1628 unsigned char *iv, const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02001629{
Jens Wiklander32b31802023-10-06 16:59:46 +02001630 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1631 output);
Jens Wiklander817466c2018-05-22 13:49:31 +02001632}
1633#endif /* MBEDTLS_CIPHER_MODE_CBC */
1634
1635#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +02001636static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1637 unsigned char *iv, const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02001638{
Jens Wiklander32b31802023-10-06 16:59:46 +02001639 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1640 output);
Jens Wiklander817466c2018-05-22 13:49:31 +02001641}
1642#endif /* MBEDTLS_CIPHER_MODE_CBC */
1643
Jens Wiklander32b31802023-10-06 16:59:46 +02001644static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1645 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001646{
1647 ((void) key_bitlen);
1648
Jens Wiklander32b31802023-10-06 16:59:46 +02001649 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001650}
1651
Jens Wiklander32b31802023-10-06 16:59:46 +02001652static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1653 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001654{
1655 ((void) key_bitlen);
1656
Jens Wiklander32b31802023-10-06 16:59:46 +02001657 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001658}
1659
Jens Wiklander32b31802023-10-06 16:59:46 +02001660static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1661 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001662{
1663 ((void) key_bitlen);
1664
Jens Wiklander32b31802023-10-06 16:59:46 +02001665 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001666}
1667
Jens Wiklander32b31802023-10-06 16:59:46 +02001668static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1669 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001670{
1671 ((void) key_bitlen);
1672
Jens Wiklander32b31802023-10-06 16:59:46 +02001673 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001674}
1675
Jens Wiklander32b31802023-10-06 16:59:46 +02001676static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1677 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001678{
1679 ((void) key_bitlen);
1680
Jens Wiklander32b31802023-10-06 16:59:46 +02001681 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001682}
1683
Jens Wiklander32b31802023-10-06 16:59:46 +02001684static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1685 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001686{
1687 ((void) key_bitlen);
1688
Jens Wiklander32b31802023-10-06 16:59:46 +02001689 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001690}
1691
Jens Wiklander32b31802023-10-06 16:59:46 +02001692static void *des_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +02001693{
Jens Wiklander32b31802023-10-06 16:59:46 +02001694 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Jens Wiklander817466c2018-05-22 13:49:31 +02001695
Jens Wiklander32b31802023-10-06 16:59:46 +02001696 if (des == NULL) {
1697 return NULL;
1698 }
Jens Wiklander817466c2018-05-22 13:49:31 +02001699
Jens Wiklander32b31802023-10-06 16:59:46 +02001700 mbedtls_des_init(des);
Jens Wiklander817466c2018-05-22 13:49:31 +02001701
Jens Wiklander32b31802023-10-06 16:59:46 +02001702 return des;
Jens Wiklander817466c2018-05-22 13:49:31 +02001703}
1704
Jens Wiklander32b31802023-10-06 16:59:46 +02001705static void des_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +02001706{
Jens Wiklander32b31802023-10-06 16:59:46 +02001707 mbedtls_des_free((mbedtls_des_context *) ctx);
1708 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +02001709}
1710
Jens Wiklander32b31802023-10-06 16:59:46 +02001711static void *des3_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +02001712{
1713 mbedtls_des3_context *des3;
Jens Wiklander32b31802023-10-06 16:59:46 +02001714 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Jens Wiklander817466c2018-05-22 13:49:31 +02001715
Jens Wiklander32b31802023-10-06 16:59:46 +02001716 if (des3 == NULL) {
1717 return NULL;
1718 }
Jens Wiklander817466c2018-05-22 13:49:31 +02001719
Jens Wiklander32b31802023-10-06 16:59:46 +02001720 mbedtls_des3_init(des3);
Jens Wiklander817466c2018-05-22 13:49:31 +02001721
Jens Wiklander32b31802023-10-06 16:59:46 +02001722 return des3;
Jens Wiklander817466c2018-05-22 13:49:31 +02001723}
1724
Jens Wiklander32b31802023-10-06 16:59:46 +02001725static void des3_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +02001726{
Jens Wiklander32b31802023-10-06 16:59:46 +02001727 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1728 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +02001729}
1730
1731static const mbedtls_cipher_base_t des_info = {
1732 MBEDTLS_CIPHER_ID_DES,
1733 des_crypt_ecb_wrap,
1734#if defined(MBEDTLS_CIPHER_MODE_CBC)
1735 des_crypt_cbc_wrap,
1736#endif
1737#if defined(MBEDTLS_CIPHER_MODE_CFB)
1738 NULL,
1739#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001740#if defined(MBEDTLS_CIPHER_MODE_OFB)
1741 NULL,
1742#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001743#if defined(MBEDTLS_CIPHER_MODE_CTR)
1744 NULL,
1745#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001746#if defined(MBEDTLS_CIPHER_MODE_XTS)
1747 NULL,
1748#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001749#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1750 NULL,
1751#endif
1752 des_setkey_enc_wrap,
1753 des_setkey_dec_wrap,
1754 des_ctx_alloc,
1755 des_ctx_free
1756};
1757
1758static const mbedtls_cipher_info_t des_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001759 "DES-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +02001760 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001761 0 >> MBEDTLS_IV_SIZE_SHIFT,
1762 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
1763 MBEDTLS_MODE_ECB,
1764 MBEDTLS_CIPHER_DES_ECB,
1765 0,
1766 MBEDTLS_CIPHER_BASE_INDEX_DES
Jens Wiklander817466c2018-05-22 13:49:31 +02001767};
1768
1769#if defined(MBEDTLS_CIPHER_MODE_CBC)
1770static const mbedtls_cipher_info_t des_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001771 "DES-CBC",
1772 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001773 8 >> MBEDTLS_IV_SIZE_SHIFT,
1774 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
1775 MBEDTLS_MODE_CBC,
1776 MBEDTLS_CIPHER_DES_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +02001777 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001778 MBEDTLS_CIPHER_BASE_INDEX_DES
Jens Wiklander817466c2018-05-22 13:49:31 +02001779};
1780#endif /* MBEDTLS_CIPHER_MODE_CBC */
1781
1782static const mbedtls_cipher_base_t des_ede_info = {
1783 MBEDTLS_CIPHER_ID_DES,
1784 des3_crypt_ecb_wrap,
1785#if defined(MBEDTLS_CIPHER_MODE_CBC)
1786 des3_crypt_cbc_wrap,
1787#endif
1788#if defined(MBEDTLS_CIPHER_MODE_CFB)
1789 NULL,
1790#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001791#if defined(MBEDTLS_CIPHER_MODE_OFB)
1792 NULL,
1793#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001794#if defined(MBEDTLS_CIPHER_MODE_CTR)
1795 NULL,
1796#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001797#if defined(MBEDTLS_CIPHER_MODE_XTS)
1798 NULL,
1799#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001800#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1801 NULL,
1802#endif
1803 des3_set2key_enc_wrap,
1804 des3_set2key_dec_wrap,
1805 des3_ctx_alloc,
1806 des3_ctx_free
1807};
1808
1809static const mbedtls_cipher_info_t des_ede_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001810 "DES-EDE-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +02001811 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001812 0 >> MBEDTLS_IV_SIZE_SHIFT,
1813 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
1814 MBEDTLS_MODE_ECB,
1815 MBEDTLS_CIPHER_DES_EDE_ECB,
1816 0,
1817 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Jens Wiklander817466c2018-05-22 13:49:31 +02001818};
1819
1820#if defined(MBEDTLS_CIPHER_MODE_CBC)
1821static const mbedtls_cipher_info_t des_ede_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001822 "DES-EDE-CBC",
1823 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001824 8 >> MBEDTLS_IV_SIZE_SHIFT,
1825 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
1826 MBEDTLS_MODE_CBC,
1827 MBEDTLS_CIPHER_DES_EDE_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +02001828 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001829 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Jens Wiklander817466c2018-05-22 13:49:31 +02001830};
1831#endif /* MBEDTLS_CIPHER_MODE_CBC */
1832
1833static const mbedtls_cipher_base_t des_ede3_info = {
1834 MBEDTLS_CIPHER_ID_3DES,
1835 des3_crypt_ecb_wrap,
1836#if defined(MBEDTLS_CIPHER_MODE_CBC)
1837 des3_crypt_cbc_wrap,
1838#endif
1839#if defined(MBEDTLS_CIPHER_MODE_CFB)
1840 NULL,
1841#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001842#if defined(MBEDTLS_CIPHER_MODE_OFB)
1843 NULL,
1844#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001845#if defined(MBEDTLS_CIPHER_MODE_CTR)
1846 NULL,
1847#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001848#if defined(MBEDTLS_CIPHER_MODE_XTS)
1849 NULL,
1850#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001851#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1852 NULL,
1853#endif
1854 des3_set3key_enc_wrap,
1855 des3_set3key_dec_wrap,
1856 des3_ctx_alloc,
1857 des3_ctx_free
1858};
1859
1860static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001861 "DES-EDE3-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +02001862 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001863 0 >> MBEDTLS_IV_SIZE_SHIFT,
1864 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
1865 MBEDTLS_MODE_ECB,
1866 MBEDTLS_CIPHER_DES_EDE3_ECB,
1867 0,
1868 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Jens Wiklander817466c2018-05-22 13:49:31 +02001869};
1870#if defined(MBEDTLS_CIPHER_MODE_CBC)
1871static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001872 "DES-EDE3-CBC",
1873 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001874 8 >> MBEDTLS_IV_SIZE_SHIFT,
1875 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
1876 MBEDTLS_MODE_CBC,
1877 MBEDTLS_CIPHER_DES_EDE3_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +02001878 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001879 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Jens Wiklander817466c2018-05-22 13:49:31 +02001880};
1881#endif /* MBEDTLS_CIPHER_MODE_CBC */
1882#endif /* MBEDTLS_DES_C */
1883
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001884#if defined(MBEDTLS_CHACHA20_C)
1885
Jens Wiklander32b31802023-10-06 16:59:46 +02001886static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1887 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001888{
Jens Wiklander32b31802023-10-06 16:59:46 +02001889 if (key_bitlen != 256U) {
1890 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1891 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001892
Jens Wiklander32b31802023-10-06 16:59:46 +02001893 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1894 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1895 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001896
Jens Wiklander32b31802023-10-06 16:59:46 +02001897 return 0;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001898}
1899
Jens Wiklander32b31802023-10-06 16:59:46 +02001900static int chacha20_stream_wrap(void *ctx, size_t length,
1901 const unsigned char *input,
1902 unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001903{
Jerome Forissier11fa71b2020-04-20 17:17:56 +02001904 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001905
Jens Wiklander32b31802023-10-06 16:59:46 +02001906 ret = mbedtls_chacha20_update(ctx, length, input, output);
1907 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1908 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1909 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001910
Jens Wiklander32b31802023-10-06 16:59:46 +02001911 return ret;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001912}
1913
Jens Wiklander32b31802023-10-06 16:59:46 +02001914static void *chacha20_ctx_alloc(void)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001915{
1916 mbedtls_chacha20_context *ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +02001917 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001918
Jens Wiklander32b31802023-10-06 16:59:46 +02001919 if (ctx == NULL) {
1920 return NULL;
1921 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001922
Jens Wiklander32b31802023-10-06 16:59:46 +02001923 mbedtls_chacha20_init(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001924
Jens Wiklander32b31802023-10-06 16:59:46 +02001925 return ctx;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001926}
1927
Jens Wiklander32b31802023-10-06 16:59:46 +02001928static void chacha20_ctx_free(void *ctx)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001929{
Jens Wiklander32b31802023-10-06 16:59:46 +02001930 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1931 mbedtls_free(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001932}
1933
1934static const mbedtls_cipher_base_t chacha20_base_info = {
1935 MBEDTLS_CIPHER_ID_CHACHA20,
1936 NULL,
1937#if defined(MBEDTLS_CIPHER_MODE_CBC)
1938 NULL,
1939#endif
1940#if defined(MBEDTLS_CIPHER_MODE_CFB)
1941 NULL,
1942#endif
1943#if defined(MBEDTLS_CIPHER_MODE_OFB)
1944 NULL,
1945#endif
1946#if defined(MBEDTLS_CIPHER_MODE_CTR)
1947 NULL,
1948#endif
1949#if defined(MBEDTLS_CIPHER_MODE_XTS)
1950 NULL,
1951#endif
1952#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1953 chacha20_stream_wrap,
1954#endif
1955 chacha20_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001956#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001957 chacha20_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001958#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001959 chacha20_ctx_alloc,
1960 chacha20_ctx_free
1961};
1962static const mbedtls_cipher_info_t chacha20_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001963 "CHACHA20",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001964 1,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001965 12 >> MBEDTLS_IV_SIZE_SHIFT,
1966 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1967 MBEDTLS_MODE_STREAM,
1968 MBEDTLS_CIPHER_CHACHA20,
1969 0,
1970 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001971};
1972#endif /* MBEDTLS_CHACHA20_C */
1973
1974#if defined(MBEDTLS_CHACHAPOLY_C)
1975
Jens Wiklander32b31802023-10-06 16:59:46 +02001976static int chachapoly_setkey_wrap(void *ctx,
1977 const unsigned char *key,
1978 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001979{
Jens Wiklander32b31802023-10-06 16:59:46 +02001980 if (key_bitlen != 256U) {
1981 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1982 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001983
Jens Wiklander32b31802023-10-06 16:59:46 +02001984 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1985 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1986 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001987
Jens Wiklander32b31802023-10-06 16:59:46 +02001988 return 0;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001989}
1990
Jens Wiklander32b31802023-10-06 16:59:46 +02001991static void *chachapoly_ctx_alloc(void)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001992{
1993 mbedtls_chachapoly_context *ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +02001994 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001995
Jens Wiklander32b31802023-10-06 16:59:46 +02001996 if (ctx == NULL) {
1997 return NULL;
1998 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001999
Jens Wiklander32b31802023-10-06 16:59:46 +02002000 mbedtls_chachapoly_init(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002001
Jens Wiklander32b31802023-10-06 16:59:46 +02002002 return ctx;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002003}
2004
Jens Wiklander32b31802023-10-06 16:59:46 +02002005static void chachapoly_ctx_free(void *ctx)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002006{
Jens Wiklander32b31802023-10-06 16:59:46 +02002007 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
2008 mbedtls_free(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002009}
2010
2011static const mbedtls_cipher_base_t chachapoly_base_info = {
2012 MBEDTLS_CIPHER_ID_CHACHA20,
2013 NULL,
2014#if defined(MBEDTLS_CIPHER_MODE_CBC)
2015 NULL,
2016#endif
2017#if defined(MBEDTLS_CIPHER_MODE_CFB)
2018 NULL,
2019#endif
2020#if defined(MBEDTLS_CIPHER_MODE_OFB)
2021 NULL,
2022#endif
2023#if defined(MBEDTLS_CIPHER_MODE_CTR)
2024 NULL,
2025#endif
2026#if defined(MBEDTLS_CIPHER_MODE_XTS)
2027 NULL,
2028#endif
2029#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2030 NULL,
2031#endif
2032 chachapoly_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002033#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002034 chachapoly_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002035#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002036 chachapoly_ctx_alloc,
2037 chachapoly_ctx_free
2038};
2039static const mbedtls_cipher_info_t chachapoly_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002040 "CHACHA20-POLY1305",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002041 1,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002042 12 >> MBEDTLS_IV_SIZE_SHIFT,
2043 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
2044 MBEDTLS_MODE_CHACHAPOLY,
2045 MBEDTLS_CIPHER_CHACHA20_POLY1305,
2046 0,
2047 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002048};
2049#endif /* MBEDTLS_CHACHAPOLY_C */
2050
Jens Wiklander817466c2018-05-22 13:49:31 +02002051#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Jens Wiklander32b31802023-10-06 16:59:46 +02002052static int null_crypt_stream(void *ctx, size_t length,
2053 const unsigned char *input,
2054 unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02002055{
2056 ((void) ctx);
Jens Wiklander32b31802023-10-06 16:59:46 +02002057 memmove(output, input, length);
2058 return 0;
Jens Wiklander817466c2018-05-22 13:49:31 +02002059}
2060
Jens Wiklander32b31802023-10-06 16:59:46 +02002061static int null_setkey(void *ctx, const unsigned char *key,
2062 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02002063{
2064 ((void) ctx);
2065 ((void) key);
2066 ((void) key_bitlen);
2067
Jens Wiklander32b31802023-10-06 16:59:46 +02002068 return 0;
Jens Wiklander817466c2018-05-22 13:49:31 +02002069}
2070
Jens Wiklander32b31802023-10-06 16:59:46 +02002071static void *null_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +02002072{
Jens Wiklander32b31802023-10-06 16:59:46 +02002073 return (void *) 1;
Jens Wiklander817466c2018-05-22 13:49:31 +02002074}
2075
Jens Wiklander32b31802023-10-06 16:59:46 +02002076static void null_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +02002077{
2078 ((void) ctx);
2079}
2080
2081static const mbedtls_cipher_base_t null_base_info = {
2082 MBEDTLS_CIPHER_ID_NULL,
2083 NULL,
2084#if defined(MBEDTLS_CIPHER_MODE_CBC)
2085 NULL,
2086#endif
2087#if defined(MBEDTLS_CIPHER_MODE_CFB)
2088 NULL,
2089#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002090#if defined(MBEDTLS_CIPHER_MODE_OFB)
2091 NULL,
2092#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002093#if defined(MBEDTLS_CIPHER_MODE_CTR)
2094 NULL,
2095#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002096#if defined(MBEDTLS_CIPHER_MODE_XTS)
2097 NULL,
2098#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002099#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2100 null_crypt_stream,
2101#endif
2102 null_setkey,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002103#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +02002104 null_setkey,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002105#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002106 null_ctx_alloc,
2107 null_ctx_free
2108};
2109
2110static const mbedtls_cipher_info_t null_cipher_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02002111 "NULL",
Jens Wiklander817466c2018-05-22 13:49:31 +02002112 1,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002113 0 >> MBEDTLS_IV_SIZE_SHIFT,
2114 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
2115 MBEDTLS_MODE_STREAM,
2116 MBEDTLS_CIPHER_NULL,
2117 0,
2118 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Jens Wiklander817466c2018-05-22 13:49:31 +02002119};
2120#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
2121
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002122#if defined(MBEDTLS_NIST_KW_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02002123static void *kw_ctx_alloc(void)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002124{
Jens Wiklander32b31802023-10-06 16:59:46 +02002125 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002126
Jens Wiklander32b31802023-10-06 16:59:46 +02002127 if (ctx != NULL) {
2128 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2129 }
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002130
Jens Wiklander32b31802023-10-06 16:59:46 +02002131 return ctx;
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002132}
2133
Jens Wiklander32b31802023-10-06 16:59:46 +02002134static void kw_ctx_free(void *ctx)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002135{
Jens Wiklander32b31802023-10-06 16:59:46 +02002136 mbedtls_nist_kw_free(ctx);
2137 mbedtls_free(ctx);
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002138}
2139
Jens Wiklander32b31802023-10-06 16:59:46 +02002140static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2141 unsigned int key_bitlen)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002142{
Jens Wiklander32b31802023-10-06 16:59:46 +02002143 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2144 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002145}
2146
Jens Wiklander32b31802023-10-06 16:59:46 +02002147static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2148 unsigned int key_bitlen)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002149{
Jens Wiklander32b31802023-10-06 16:59:46 +02002150 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2151 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002152}
2153
2154static const mbedtls_cipher_base_t kw_aes_info = {
2155 MBEDTLS_CIPHER_ID_AES,
2156 NULL,
2157#if defined(MBEDTLS_CIPHER_MODE_CBC)
2158 NULL,
2159#endif
2160#if defined(MBEDTLS_CIPHER_MODE_CFB)
2161 NULL,
2162#endif
2163#if defined(MBEDTLS_CIPHER_MODE_OFB)
2164 NULL,
2165#endif
2166#if defined(MBEDTLS_CIPHER_MODE_CTR)
2167 NULL,
2168#endif
2169#if defined(MBEDTLS_CIPHER_MODE_XTS)
2170 NULL,
2171#endif
2172#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2173 NULL,
2174#endif
2175 kw_aes_setkey_wrap,
2176 kw_aes_setkey_unwrap,
2177 kw_ctx_alloc,
2178 kw_ctx_free,
2179};
2180
2181static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002182 "AES-128-KW",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002183 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002184 0 >> MBEDTLS_IV_SIZE_SHIFT,
2185 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
2186 MBEDTLS_MODE_KW,
2187 MBEDTLS_CIPHER_AES_128_KW,
2188 0,
2189 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002190};
2191
Tom Van Eyckc1633172024-04-09 18:44:13 +02002192#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002193static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002194 "AES-192-KW",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002195 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002196 0 >> MBEDTLS_IV_SIZE_SHIFT,
2197 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
2198 MBEDTLS_MODE_KW,
2199 MBEDTLS_CIPHER_AES_192_KW,
2200 0,
2201 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002202};
2203
2204static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002205 "AES-256-KW",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002206 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002207 0 >> MBEDTLS_IV_SIZE_SHIFT,
2208 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
2209 MBEDTLS_MODE_KW,
2210 MBEDTLS_CIPHER_AES_256_KW,
2211 0,
2212 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002213};
Tom Van Eyckc1633172024-04-09 18:44:13 +02002214#endif
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002215
2216static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002217 "AES-128-KWP",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002218 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002219 0 >> MBEDTLS_IV_SIZE_SHIFT,
2220 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
2221 MBEDTLS_MODE_KWP,
2222 MBEDTLS_CIPHER_AES_128_KWP,
2223 0,
2224 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002225};
2226
Tom Van Eyckc1633172024-04-09 18:44:13 +02002227#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002228static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002229 "AES-192-KWP",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002230 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002231 0 >> MBEDTLS_IV_SIZE_SHIFT,
2232 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
2233 MBEDTLS_MODE_KWP,
2234 MBEDTLS_CIPHER_AES_192_KWP,
2235 0,
2236 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002237};
2238
2239static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002240 "AES-256-KWP",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002241 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002242 0 >> MBEDTLS_IV_SIZE_SHIFT,
2243 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
2244 MBEDTLS_MODE_KWP,
2245 MBEDTLS_CIPHER_AES_256_KWP,
2246 0,
2247 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002248};
Tom Van Eyckc1633172024-04-09 18:44:13 +02002249#endif
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002250#endif /* MBEDTLS_NIST_KW_C */
2251
Jens Wiklander817466c2018-05-22 13:49:31 +02002252const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
2253{
2254#if defined(MBEDTLS_AES_C)
2255 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002256#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002257 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2258 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002259#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002260#if defined(MBEDTLS_CIPHER_MODE_CBC)
2261 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002262#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002263 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2264 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
2265#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002266#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002267#if defined(MBEDTLS_CIPHER_MODE_CFB)
2268 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002269#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002270 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2271 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
2272#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002273#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002274#if defined(MBEDTLS_CIPHER_MODE_OFB)
2275 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002276#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002277 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2278 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2279#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002280#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002281#if defined(MBEDTLS_CIPHER_MODE_CTR)
2282 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002283#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002284 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2285 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
2286#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002287#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002288#if defined(MBEDTLS_CIPHER_MODE_XTS)
2289 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002290#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002291 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2292#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002293#endif
2294#endif /* MBEDTLS_AES_C */
2295#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +02002296 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002297#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002298 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2299 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
2300#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002301#endif
2302#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +02002303 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002304#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002305 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2306 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002307#endif
2308#endif
2309#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander32b31802023-10-06 16:59:46 +02002310 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002311#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander32b31802023-10-06 16:59:46 +02002312 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2313 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Jens Wiklander817466c2018-05-22 13:49:31 +02002314#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002315#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002316
Jens Wiklander817466c2018-05-22 13:49:31 +02002317#if defined(MBEDTLS_CAMELLIA_C)
2318 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2319 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2320 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2321#if defined(MBEDTLS_CIPHER_MODE_CBC)
2322 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2323 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2324 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
2325#endif
2326#if defined(MBEDTLS_CIPHER_MODE_CFB)
2327 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2328 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2329 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
2330#endif
2331#if defined(MBEDTLS_CIPHER_MODE_CTR)
2332 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2333 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2334 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
2335#endif
2336#if defined(MBEDTLS_GCM_C)
2337 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2338 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2339 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
2340#endif
2341#if defined(MBEDTLS_CCM_C)
2342 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2343 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2344 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Jens Wiklander32b31802023-10-06 16:59:46 +02002345 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2346 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2347 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Jens Wiklander817466c2018-05-22 13:49:31 +02002348#endif
2349#endif /* MBEDTLS_CAMELLIA_C */
2350
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002351#if defined(MBEDTLS_ARIA_C)
2352 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2353 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2354 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2355#if defined(MBEDTLS_CIPHER_MODE_CBC)
2356 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2357 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2358 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2359#endif
2360#if defined(MBEDTLS_CIPHER_MODE_CFB)
2361 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2362 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2363 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2364#endif
2365#if defined(MBEDTLS_CIPHER_MODE_CTR)
2366 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2367 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2368 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2369#endif
2370#if defined(MBEDTLS_GCM_C)
2371 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2372 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2373 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2374#endif
2375#if defined(MBEDTLS_CCM_C)
2376 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2377 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2378 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Jens Wiklander32b31802023-10-06 16:59:46 +02002379 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2380 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2381 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002382#endif
2383#endif /* MBEDTLS_ARIA_C */
2384
Jens Wiklander817466c2018-05-22 13:49:31 +02002385#if defined(MBEDTLS_DES_C)
2386 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2387 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2388 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2389#if defined(MBEDTLS_CIPHER_MODE_CBC)
2390 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2391 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2392 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
2393#endif
2394#endif /* MBEDTLS_DES_C */
2395
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002396#if defined(MBEDTLS_CHACHA20_C)
2397 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2398#endif
2399
2400#if defined(MBEDTLS_CHACHAPOLY_C)
2401 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
2402#endif
2403
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002404#if defined(MBEDTLS_NIST_KW_C)
2405 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002406#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002407 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2408 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002409#endif
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002410 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002411#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002412 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2413 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2414#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002415#endif
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002416
Jens Wiklander817466c2018-05-22 13:49:31 +02002417#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2418 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2419#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
2420
2421 { MBEDTLS_CIPHER_NONE, NULL }
2422};
2423
Jens Wiklander32b31802023-10-06 16:59:46 +02002424#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2425 sizeof(mbedtls_cipher_definitions[0]))
Jens Wiklander817466c2018-05-22 13:49:31 +02002426int mbedtls_cipher_supported[NUM_CIPHERS];
2427
Tom Van Eyckc1633172024-04-09 18:44:13 +02002428const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
2429#if defined(MBEDTLS_AES_C)
2430 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
2431#endif
2432#if defined(MBEDTLS_ARIA_C)
2433 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
2434#endif
2435#if defined(MBEDTLS_CAMELLIA_C)
2436 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
2437#endif
2438#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
2439 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
2440#endif
2441#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
2442 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
2443#endif
2444#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
2445 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
2446#endif
2447#if defined(MBEDTLS_CHACHA20_C)
2448 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
2449#endif
2450#if defined(MBEDTLS_CHACHAPOLY_C)
2451 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
2452#endif
2453#if defined(MBEDTLS_DES_C)
2454 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
2455#endif
2456#if defined(MBEDTLS_DES_C)
2457 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
2458#endif
2459#if defined(MBEDTLS_DES_C)
2460 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
2461#endif
2462#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
2463 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
2464#endif
2465#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
2466 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
2467#endif
2468#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
2469 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
2470#endif
2471#if defined(MBEDTLS_NIST_KW_C)
2472 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
2473#endif
2474#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2475 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
2476#endif
2477#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
2478 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
2479#endif
2480};
2481
Jens Wiklander817466c2018-05-22 13:49:31 +02002482#endif /* MBEDTLS_CIPHER_C */