blob: b570241af81a6ce37c825f7a72af85591bcc2c8e [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
Edison Aiab0eb552018-12-19 15:36:28 +080014#include <string.h>
15
Jens Wiklander817466c2018-05-22 13:49:31 +020016#if defined(MBEDTLS_CIPHER_C)
17
Jens Wiklander32b31802023-10-06 16:59:46 +020018#include "cipher_wrap.h"
Jerome Forissier11fa71b2020-04-20 17:17:56 +020019#include "mbedtls/error.h"
Jens Wiklander817466c2018-05-22 13:49:31 +020020
Jens Wiklander3d3b0592019-03-20 15:30:29 +010021#if defined(MBEDTLS_CHACHAPOLY_C)
22#include "mbedtls/chachapoly.h"
23#endif
24
Jens Wiklander817466c2018-05-22 13:49:31 +020025#if defined(MBEDTLS_AES_C)
26#include "mbedtls/aes.h"
27#endif
28
Jens Wiklander817466c2018-05-22 13:49:31 +020029#if defined(MBEDTLS_CAMELLIA_C)
30#include "mbedtls/camellia.h"
31#endif
32
Jens Wiklander3d3b0592019-03-20 15:30:29 +010033#if defined(MBEDTLS_ARIA_C)
34#include "mbedtls/aria.h"
35#endif
36
Jens Wiklander817466c2018-05-22 13:49:31 +020037#if defined(MBEDTLS_DES_C)
38#include "mbedtls/des.h"
39#endif
40
Jens Wiklander3d3b0592019-03-20 15:30:29 +010041#if defined(MBEDTLS_CHACHA20_C)
42#include "mbedtls/chacha20.h"
43#endif
44
Jens Wiklander817466c2018-05-22 13:49:31 +020045#if defined(MBEDTLS_GCM_C)
46#include "mbedtls/gcm.h"
47#endif
48
49#if defined(MBEDTLS_CCM_C)
50#include "mbedtls/ccm.h"
51#endif
52
Jerome Forissier11fa71b2020-04-20 17:17:56 +020053#if defined(MBEDTLS_NIST_KW_C)
54#include "mbedtls/nist_kw.h"
55#endif
56
Jens Wiklander817466c2018-05-22 13:49:31 +020057#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
58#include <string.h>
59#endif
60
Jens Wiklander817466c2018-05-22 13:49:31 +020061#include "mbedtls/platform.h"
Jens Wiklander817466c2018-05-22 13:49:31 +020062
Tom Van Eyckc1633172024-04-09 18:44:13 +020063enum mbedtls_cipher_base_index {
64#if defined(MBEDTLS_AES_C)
65 MBEDTLS_CIPHER_BASE_INDEX_AES,
66#endif
67#if defined(MBEDTLS_ARIA_C)
68 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
69#endif
70#if defined(MBEDTLS_CAMELLIA_C)
71 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
72#endif
73#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
74 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
75#endif
76#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
77 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
78#endif
79#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
80 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
81#endif
82#if defined(MBEDTLS_CHACHA20_C)
83 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
84#endif
85#if defined(MBEDTLS_CHACHAPOLY_C)
86 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
87#endif
88#if defined(MBEDTLS_DES_C)
89 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
90#endif
91#if defined(MBEDTLS_DES_C)
92 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
93#endif
94#if defined(MBEDTLS_DES_C)
95 MBEDTLS_CIPHER_BASE_INDEX_DES,
96#endif
97#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
98 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
99#endif
100#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
101 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
102#endif
103#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
104 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
105#endif
106#if defined(MBEDTLS_NIST_KW_C)
107 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
108#endif
109#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
110 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
111#endif
112#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
113 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
114#endif
115 /* Prevent compile failure due to empty enum */
116 MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
117};
118
119#if defined(MBEDTLS_GCM_C) && \
120 (defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA) || \
121 defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))
Jens Wiklander817466c2018-05-22 13:49:31 +0200122/* shared by all GCM ciphers */
Jens Wiklander32b31802023-10-06 16:59:46 +0200123static void *gcm_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +0200124{
Jens Wiklander32b31802023-10-06 16:59:46 +0200125 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Jens Wiklander817466c2018-05-22 13:49:31 +0200126
Jens Wiklander32b31802023-10-06 16:59:46 +0200127 if (ctx != NULL) {
128 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
129 }
Jens Wiklander817466c2018-05-22 13:49:31 +0200130
Jens Wiklander32b31802023-10-06 16:59:46 +0200131 return ctx;
Jens Wiklander817466c2018-05-22 13:49:31 +0200132}
133
Edison Aiab0eb552018-12-19 15:36:28 +0800134static void gcm_ctx_clone(void *dst, const void *src)
135{
136 memcpy(dst, src, sizeof(mbedtls_gcm_context));
137}
138
Jens Wiklander32b31802023-10-06 16:59:46 +0200139static void gcm_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +0200140{
Jens Wiklander32b31802023-10-06 16:59:46 +0200141 mbedtls_gcm_free(ctx);
142 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200143}
144#endif /* MBEDTLS_GCM_C */
145
Tom Van Eyckc1633172024-04-09 18:44:13 +0200146#if defined(MBEDTLS_CCM_C) && \
147 (defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA) || \
148 defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))
Jens Wiklander817466c2018-05-22 13:49:31 +0200149/* shared by all CCM ciphers */
Jens Wiklander32b31802023-10-06 16:59:46 +0200150static void *ccm_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +0200151{
Jens Wiklander32b31802023-10-06 16:59:46 +0200152 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Jens Wiklander817466c2018-05-22 13:49:31 +0200153
Jens Wiklander32b31802023-10-06 16:59:46 +0200154 if (ctx != NULL) {
155 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
156 }
Jens Wiklander817466c2018-05-22 13:49:31 +0200157
Jens Wiklander32b31802023-10-06 16:59:46 +0200158 return ctx;
Jens Wiklander817466c2018-05-22 13:49:31 +0200159}
160
Edison Aiab0eb552018-12-19 15:36:28 +0800161static void ccm_ctx_clone(void *dst, const void *src)
162{
163 memcpy(dst, src, sizeof(mbedtls_ccm_context));
164}
165
Jens Wiklander32b31802023-10-06 16:59:46 +0200166static void ccm_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +0200167{
Jens Wiklander32b31802023-10-06 16:59:46 +0200168 mbedtls_ccm_free(ctx);
169 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200170}
171#endif /* MBEDTLS_CCM_C */
172
173#if defined(MBEDTLS_AES_C)
174
Jens Wiklander32b31802023-10-06 16:59:46 +0200175static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
176 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200177{
Jens Wiklander32b31802023-10-06 16:59:46 +0200178 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200179}
180
181#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +0200182static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
183 unsigned char *iv, const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200184{
Jens Wiklander32b31802023-10-06 16:59:46 +0200185 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
186 output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200187}
188#endif /* MBEDTLS_CIPHER_MODE_CBC */
189
190#if defined(MBEDTLS_CIPHER_MODE_CFB)
Jens Wiklander32b31802023-10-06 16:59:46 +0200191static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
192 size_t length, size_t *iv_off, unsigned char *iv,
193 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200194{
Jens Wiklander32b31802023-10-06 16:59:46 +0200195 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
196 input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200197}
198#endif /* MBEDTLS_CIPHER_MODE_CFB */
199
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100200#if defined(MBEDTLS_CIPHER_MODE_OFB)
Jens Wiklander32b31802023-10-06 16:59:46 +0200201static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
202 unsigned char *iv, const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100203{
Jens Wiklander32b31802023-10-06 16:59:46 +0200204 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
205 iv, input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100206}
207#endif /* MBEDTLS_CIPHER_MODE_OFB */
208
Jens Wiklander817466c2018-05-22 13:49:31 +0200209#if defined(MBEDTLS_CIPHER_MODE_CTR)
Jens Wiklander32b31802023-10-06 16:59:46 +0200210static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
211 unsigned char *nonce_counter, unsigned char *stream_block,
212 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200213{
Jens Wiklander32b31802023-10-06 16:59:46 +0200214 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
215 stream_block, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200216}
217#endif /* MBEDTLS_CIPHER_MODE_CTR */
218
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100219#if defined(MBEDTLS_CIPHER_MODE_XTS)
Jens Wiklander32b31802023-10-06 16:59:46 +0200220static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
221 size_t length,
222 const unsigned char data_unit[16],
223 const unsigned char *input,
224 unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100225{
226 mbedtls_aes_xts_context *xts_ctx = ctx;
227 int mode;
228
Jens Wiklander32b31802023-10-06 16:59:46 +0200229 switch (operation) {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100230 case MBEDTLS_ENCRYPT:
231 mode = MBEDTLS_AES_ENCRYPT;
232 break;
233 case MBEDTLS_DECRYPT:
234 mode = MBEDTLS_AES_DECRYPT;
235 break;
236 default:
237 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
238 }
239
Jens Wiklander32b31802023-10-06 16:59:46 +0200240 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
241 data_unit, input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100242}
243#endif /* MBEDTLS_CIPHER_MODE_XTS */
244
Tom Van Eyckc1633172024-04-09 18:44:13 +0200245#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander32b31802023-10-06 16:59:46 +0200246static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
247 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200248{
Jens Wiklander32b31802023-10-06 16:59:46 +0200249 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200250}
Tom Van Eyckc1633172024-04-09 18:44:13 +0200251#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200252
Jens Wiklander32b31802023-10-06 16:59:46 +0200253static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
254 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200255{
Jens Wiklander32b31802023-10-06 16:59:46 +0200256 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200257}
258
Jens Wiklander32b31802023-10-06 16:59:46 +0200259static void *aes_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +0200260{
Jens Wiklander32b31802023-10-06 16:59:46 +0200261 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Jens Wiklander817466c2018-05-22 13:49:31 +0200262
Jens Wiklander32b31802023-10-06 16:59:46 +0200263 if (aes == NULL) {
264 return NULL;
265 }
Jens Wiklander817466c2018-05-22 13:49:31 +0200266
Jens Wiklander32b31802023-10-06 16:59:46 +0200267 mbedtls_aes_init(aes);
Jens Wiklander817466c2018-05-22 13:49:31 +0200268
Jens Wiklander32b31802023-10-06 16:59:46 +0200269 return aes;
Jens Wiklander817466c2018-05-22 13:49:31 +0200270}
271
Edison Aiab0eb552018-12-19 15:36:28 +0800272static void aes_ctx_clone(void *dst, const void *src)
273{
274 memcpy(dst, src, sizeof(mbedtls_aes_context));
275}
276
Jens Wiklander32b31802023-10-06 16:59:46 +0200277static void aes_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +0200278{
Jens Wiklander32b31802023-10-06 16:59:46 +0200279 mbedtls_aes_free((mbedtls_aes_context *) ctx);
280 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200281}
282
283static const mbedtls_cipher_base_t aes_info = {
284 MBEDTLS_CIPHER_ID_AES,
285 aes_crypt_ecb_wrap,
286#if defined(MBEDTLS_CIPHER_MODE_CBC)
287 aes_crypt_cbc_wrap,
288#endif
289#if defined(MBEDTLS_CIPHER_MODE_CFB)
290 aes_crypt_cfb128_wrap,
291#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100292#if defined(MBEDTLS_CIPHER_MODE_OFB)
293 aes_crypt_ofb_wrap,
294#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200295#if defined(MBEDTLS_CIPHER_MODE_CTR)
296 aes_crypt_ctr_wrap,
297#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100298#if defined(MBEDTLS_CIPHER_MODE_XTS)
299 NULL,
300#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200301#if defined(MBEDTLS_CIPHER_MODE_STREAM)
302 NULL,
303#endif
304 aes_setkey_enc_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200305#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +0200306 aes_setkey_dec_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200307#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200308 aes_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +0800309 aes_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +0200310 aes_ctx_free
311};
312
313static const mbedtls_cipher_info_t aes_128_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200314 "AES-128-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200315 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200316 0 >> MBEDTLS_IV_SIZE_SHIFT,
317 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
318 MBEDTLS_MODE_ECB,
319 MBEDTLS_CIPHER_AES_128_ECB,
320 0,
321 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200322};
323
Tom Van Eyckc1633172024-04-09 18:44:13 +0200324#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200325static const mbedtls_cipher_info_t aes_192_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200326 "AES-192-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200327 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200328 0 >> MBEDTLS_IV_SIZE_SHIFT,
329 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
330 MBEDTLS_MODE_ECB,
331 MBEDTLS_CIPHER_AES_192_ECB,
332 0,
333 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200334};
335
336static const mbedtls_cipher_info_t aes_256_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200337 "AES-256-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200338 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200339 0 >> MBEDTLS_IV_SIZE_SHIFT,
340 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
341 MBEDTLS_MODE_ECB,
342 MBEDTLS_CIPHER_AES_256_ECB,
343 0,
344 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200345};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200346#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200347
348#if defined(MBEDTLS_CIPHER_MODE_CBC)
349static const mbedtls_cipher_info_t aes_128_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200350 "AES-128-CBC",
351 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200352 16 >> MBEDTLS_IV_SIZE_SHIFT,
353 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
354 MBEDTLS_MODE_CBC,
355 MBEDTLS_CIPHER_AES_128_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200356 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200357 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200358};
359
Tom Van Eyckc1633172024-04-09 18:44:13 +0200360#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200361static const mbedtls_cipher_info_t aes_192_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200362 "AES-192-CBC",
363 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200364 16 >> MBEDTLS_IV_SIZE_SHIFT,
365 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
366 MBEDTLS_MODE_CBC,
367 MBEDTLS_CIPHER_AES_192_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200368 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200369 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200370};
371
372static const mbedtls_cipher_info_t aes_256_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200373 "AES-256-CBC",
374 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200375 16 >> MBEDTLS_IV_SIZE_SHIFT,
376 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
377 MBEDTLS_MODE_CBC,
378 MBEDTLS_CIPHER_AES_256_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200379 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200380 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200381};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200382#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200383#endif /* MBEDTLS_CIPHER_MODE_CBC */
384
385#if defined(MBEDTLS_CIPHER_MODE_CFB)
386static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200387 "AES-128-CFB128",
388 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200389 16 >> MBEDTLS_IV_SIZE_SHIFT,
390 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
391 MBEDTLS_MODE_CFB,
392 MBEDTLS_CIPHER_AES_128_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200393 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200394 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200395};
396
Tom Van Eyckc1633172024-04-09 18:44:13 +0200397#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200398static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200399 "AES-192-CFB128",
400 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200401 16 >> MBEDTLS_IV_SIZE_SHIFT,
402 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
403 MBEDTLS_MODE_CFB,
404 MBEDTLS_CIPHER_AES_192_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200405 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200406 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200407};
408
409static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200410 "AES-256-CFB128",
411 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200412 16 >> MBEDTLS_IV_SIZE_SHIFT,
413 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
414 MBEDTLS_MODE_CFB,
415 MBEDTLS_CIPHER_AES_256_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200416 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200417 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200418};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200419#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200420#endif /* MBEDTLS_CIPHER_MODE_CFB */
421
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100422#if defined(MBEDTLS_CIPHER_MODE_OFB)
423static const mbedtls_cipher_info_t aes_128_ofb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100424 "AES-128-OFB",
425 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200426 16 >> MBEDTLS_IV_SIZE_SHIFT,
427 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
428 MBEDTLS_MODE_OFB,
429 MBEDTLS_CIPHER_AES_128_OFB,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100430 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200431 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100432};
433
Tom Van Eyckc1633172024-04-09 18:44:13 +0200434#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100435static const mbedtls_cipher_info_t aes_192_ofb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100436 "AES-192-OFB",
437 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200438 16 >> MBEDTLS_IV_SIZE_SHIFT,
439 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
440 MBEDTLS_MODE_OFB,
441 MBEDTLS_CIPHER_AES_192_OFB,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100442 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200443 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100444};
445
446static const mbedtls_cipher_info_t aes_256_ofb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100447 "AES-256-OFB",
448 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200449 16 >> MBEDTLS_IV_SIZE_SHIFT,
450 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
451 MBEDTLS_MODE_OFB,
452 MBEDTLS_CIPHER_AES_256_OFB,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100453 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200454 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100455};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200456#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100457#endif /* MBEDTLS_CIPHER_MODE_OFB */
458
Jens Wiklander817466c2018-05-22 13:49:31 +0200459#if defined(MBEDTLS_CIPHER_MODE_CTR)
460static const mbedtls_cipher_info_t aes_128_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200461 "AES-128-CTR",
462 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200463 16 >> MBEDTLS_IV_SIZE_SHIFT,
464 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
465 MBEDTLS_MODE_CTR,
466 MBEDTLS_CIPHER_AES_128_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +0200467 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200468 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200469};
470
Tom Van Eyckc1633172024-04-09 18:44:13 +0200471#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200472static const mbedtls_cipher_info_t aes_192_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200473 "AES-192-CTR",
474 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200475 16 >> MBEDTLS_IV_SIZE_SHIFT,
476 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
477 MBEDTLS_MODE_CTR,
478 MBEDTLS_CIPHER_AES_192_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +0200479 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200480 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200481};
482
483static const mbedtls_cipher_info_t aes_256_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200484 "AES-256-CTR",
485 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200486 16 >> MBEDTLS_IV_SIZE_SHIFT,
487 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
488 MBEDTLS_MODE_CTR,
489 MBEDTLS_CIPHER_AES_256_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +0200490 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200491 MBEDTLS_CIPHER_BASE_INDEX_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200492};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200493#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200494#endif /* MBEDTLS_CIPHER_MODE_CTR */
495
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100496#if defined(MBEDTLS_CIPHER_MODE_XTS)
Jens Wiklander32b31802023-10-06 16:59:46 +0200497static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
498 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100499{
500 mbedtls_aes_xts_context *xts_ctx = ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +0200501 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100502}
503
Jens Wiklander32b31802023-10-06 16:59:46 +0200504static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
505 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100506{
507 mbedtls_aes_xts_context *xts_ctx = ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +0200508 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100509}
510
Jens Wiklander32b31802023-10-06 16:59:46 +0200511static void *xts_aes_ctx_alloc(void)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100512{
Jens Wiklander32b31802023-10-06 16:59:46 +0200513 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100514
Jens Wiklander32b31802023-10-06 16:59:46 +0200515 if (xts_ctx != NULL) {
516 mbedtls_aes_xts_init(xts_ctx);
517 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100518
Jens Wiklander32b31802023-10-06 16:59:46 +0200519 return xts_ctx;
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100520}
521
Jens Wiklander32b31802023-10-06 16:59:46 +0200522static void xts_aes_ctx_free(void *ctx)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100523{
524 mbedtls_aes_xts_context *xts_ctx = ctx;
525
Jens Wiklander32b31802023-10-06 16:59:46 +0200526 if (xts_ctx == NULL) {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100527 return;
Jens Wiklander32b31802023-10-06 16:59:46 +0200528 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100529
Jens Wiklander32b31802023-10-06 16:59:46 +0200530 mbedtls_aes_xts_free(xts_ctx);
531 mbedtls_free(xts_ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100532}
533
534static const mbedtls_cipher_base_t xts_aes_info = {
535 MBEDTLS_CIPHER_ID_AES,
536 NULL,
537#if defined(MBEDTLS_CIPHER_MODE_CBC)
538 NULL,
539#endif
540#if defined(MBEDTLS_CIPHER_MODE_CFB)
541 NULL,
542#endif
543#if defined(MBEDTLS_CIPHER_MODE_OFB)
544 NULL,
545#endif
546#if defined(MBEDTLS_CIPHER_MODE_CTR)
547 NULL,
548#endif
549#if defined(MBEDTLS_CIPHER_MODE_XTS)
550 aes_crypt_xts_wrap,
551#endif
552#if defined(MBEDTLS_CIPHER_MODE_STREAM)
553 NULL,
554#endif
555 xts_aes_setkey_enc_wrap,
556 xts_aes_setkey_dec_wrap,
557 xts_aes_ctx_alloc,
558 xts_aes_ctx_free
559};
560
561static const mbedtls_cipher_info_t aes_128_xts_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100562 "AES-128-XTS",
563 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200564 16 >> MBEDTLS_IV_SIZE_SHIFT,
565 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
566 MBEDTLS_MODE_XTS,
567 MBEDTLS_CIPHER_AES_128_XTS,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100568 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200569 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100570};
571
Tom Van Eyckc1633172024-04-09 18:44:13 +0200572#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100573static const mbedtls_cipher_info_t aes_256_xts_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100574 "AES-256-XTS",
575 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200576 16 >> MBEDTLS_IV_SIZE_SHIFT,
577 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
578 MBEDTLS_MODE_XTS,
579 MBEDTLS_CIPHER_AES_256_XTS,
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100580 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200581 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100582};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200583#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100584#endif /* MBEDTLS_CIPHER_MODE_XTS */
Tom Van Eyckc1633172024-04-09 18:44:13 +0200585#endif /* MBEDTLS_AES_C */
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100586
Tom Van Eyckc1633172024-04-09 18:44:13 +0200587#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)
Jens Wiklander32b31802023-10-06 16:59:46 +0200588static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
589 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200590{
Jens Wiklander32b31802023-10-06 16:59:46 +0200591 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
592 key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200593}
Tom Van Eyckc1633172024-04-09 18:44:13 +0200594#endif /* MBEDTLS_GCM_C && MBEDTLS_CCM_GCM_CAN_AES */
Jens Wiklander817466c2018-05-22 13:49:31 +0200595
Tom Van Eyckc1633172024-04-09 18:44:13 +0200596#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +0200597static const mbedtls_cipher_base_t gcm_aes_info = {
598 MBEDTLS_CIPHER_ID_AES,
599 NULL,
600#if defined(MBEDTLS_CIPHER_MODE_CBC)
601 NULL,
602#endif
603#if defined(MBEDTLS_CIPHER_MODE_CFB)
604 NULL,
605#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100606#if defined(MBEDTLS_CIPHER_MODE_OFB)
607 NULL,
608#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200609#if defined(MBEDTLS_CIPHER_MODE_CTR)
610 NULL,
611#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100612#if defined(MBEDTLS_CIPHER_MODE_XTS)
613 NULL,
614#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200615#if defined(MBEDTLS_CIPHER_MODE_STREAM)
616 NULL,
617#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +0200618#if defined(MBEDTLS_GCM_C)
Jens Wiklander817466c2018-05-22 13:49:31 +0200619 gcm_aes_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200620#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +0200621 gcm_aes_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200622#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200623 gcm_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +0800624 gcm_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +0200625 gcm_ctx_free,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200626#else
627 NULL,
628 NULL,
629 NULL,
630 NULL,
631#endif /* MBEDTLS_GCM_C */
Jens Wiklander817466c2018-05-22 13:49:31 +0200632};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200633#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander817466c2018-05-22 13:49:31 +0200634
Tom Van Eyckc1633172024-04-09 18:44:13 +0200635#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +0200636static const mbedtls_cipher_info_t aes_128_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200637 "AES-128-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200638 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200639 12 >> MBEDTLS_IV_SIZE_SHIFT,
640 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
641 MBEDTLS_MODE_GCM,
642 MBEDTLS_CIPHER_AES_128_GCM,
643 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
644 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200645};
646
Tom Van Eyckc1633172024-04-09 18:44:13 +0200647#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200648static const mbedtls_cipher_info_t aes_192_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200649 "AES-192-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200650 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200651 12 >> MBEDTLS_IV_SIZE_SHIFT,
652 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
653 MBEDTLS_MODE_GCM,
654 MBEDTLS_CIPHER_AES_192_GCM,
655 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
656 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200657};
658
659static const mbedtls_cipher_info_t aes_256_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200660 "AES-256-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200661 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200662 12 >> MBEDTLS_IV_SIZE_SHIFT,
663 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
664 MBEDTLS_MODE_GCM,
665 MBEDTLS_CIPHER_AES_256_GCM,
666 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
667 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200668};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200669#endif
670#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander817466c2018-05-22 13:49:31 +0200671
Tom Van Eyckc1633172024-04-09 18:44:13 +0200672#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)
Jens Wiklander32b31802023-10-06 16:59:46 +0200673static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
674 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200675{
Jens Wiklander32b31802023-10-06 16:59:46 +0200676 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
677 key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200678}
Tom Van Eyckc1633172024-04-09 18:44:13 +0200679#endif /* MBEDTLS_CCM_C && MBEDTLS_CCM_GCM_CAN_AES */
Jens Wiklander817466c2018-05-22 13:49:31 +0200680
Tom Van Eyckc1633172024-04-09 18:44:13 +0200681#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +0200682static const mbedtls_cipher_base_t ccm_aes_info = {
683 MBEDTLS_CIPHER_ID_AES,
684 NULL,
685#if defined(MBEDTLS_CIPHER_MODE_CBC)
686 NULL,
687#endif
688#if defined(MBEDTLS_CIPHER_MODE_CFB)
689 NULL,
690#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100691#if defined(MBEDTLS_CIPHER_MODE_OFB)
692 NULL,
693#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200694#if defined(MBEDTLS_CIPHER_MODE_CTR)
695 NULL,
696#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100697#if defined(MBEDTLS_CIPHER_MODE_XTS)
698 NULL,
699#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200700#if defined(MBEDTLS_CIPHER_MODE_STREAM)
701 NULL,
702#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +0200703#if defined(MBEDTLS_CCM_C)
Jens Wiklander817466c2018-05-22 13:49:31 +0200704 ccm_aes_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200705#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +0200706 ccm_aes_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200707#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200708 ccm_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +0800709 ccm_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +0200710 ccm_ctx_free,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200711#else
712 NULL,
713 NULL,
714 NULL,
715 NULL,
716#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200717};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200718#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander817466c2018-05-22 13:49:31 +0200719
Tom Van Eyckc1633172024-04-09 18:44:13 +0200720#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +0200721static const mbedtls_cipher_info_t aes_128_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200722 "AES-128-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200723 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200724 12 >> MBEDTLS_IV_SIZE_SHIFT,
725 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
726 MBEDTLS_MODE_CCM,
727 MBEDTLS_CIPHER_AES_128_CCM,
728 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
729 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200730};
731
Tom Van Eyckc1633172024-04-09 18:44:13 +0200732#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +0200733static const mbedtls_cipher_info_t aes_192_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200734 "AES-192-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200735 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200736 12 >> MBEDTLS_IV_SIZE_SHIFT,
737 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
738 MBEDTLS_MODE_CCM,
739 MBEDTLS_CIPHER_AES_192_CCM,
740 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
741 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200742};
743
744static const mbedtls_cipher_info_t aes_256_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200745 "AES-256-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +0200746 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200747 12 >> MBEDTLS_IV_SIZE_SHIFT,
748 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
749 MBEDTLS_MODE_CCM,
750 MBEDTLS_CIPHER_AES_256_CCM,
751 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
752 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander817466c2018-05-22 13:49:31 +0200753};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200754#endif
755#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander32b31802023-10-06 16:59:46 +0200756
Tom Van Eyckc1633172024-04-09 18:44:13 +0200757#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander32b31802023-10-06 16:59:46 +0200758static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +0200759 "AES-128-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +0200760 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200761 12 >> MBEDTLS_IV_SIZE_SHIFT,
762 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
763 MBEDTLS_MODE_CCM_STAR_NO_TAG,
764 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
765 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
766 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander32b31802023-10-06 16:59:46 +0200767};
768
Tom Van Eyckc1633172024-04-09 18:44:13 +0200769#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander32b31802023-10-06 16:59:46 +0200770static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +0200771 "AES-192-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +0200772 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200773 12 >> MBEDTLS_IV_SIZE_SHIFT,
774 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
775 MBEDTLS_MODE_CCM_STAR_NO_TAG,
776 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
777 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
778 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander32b31802023-10-06 16:59:46 +0200779};
780
781static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +0200782 "AES-256-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +0200783 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200784 12 >> MBEDTLS_IV_SIZE_SHIFT,
785 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
786 MBEDTLS_MODE_CCM_STAR_NO_TAG,
787 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
788 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
789 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Jens Wiklander32b31802023-10-06 16:59:46 +0200790};
Tom Van Eyckc1633172024-04-09 18:44:13 +0200791#endif
792#endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA */
Jens Wiklander817466c2018-05-22 13:49:31 +0200793
Jens Wiklander817466c2018-05-22 13:49:31 +0200794
795#if defined(MBEDTLS_CAMELLIA_C)
796
Jens Wiklander32b31802023-10-06 16:59:46 +0200797static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
798 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200799{
Jens Wiklander32b31802023-10-06 16:59:46 +0200800 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
801 output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200802}
803
804#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +0200805static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
806 size_t length, unsigned char *iv,
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_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
810 input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200811}
812#endif /* MBEDTLS_CIPHER_MODE_CBC */
813
814#if defined(MBEDTLS_CIPHER_MODE_CFB)
Jens Wiklander32b31802023-10-06 16:59:46 +0200815static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
816 size_t length, size_t *iv_off, unsigned char *iv,
817 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200818{
Jens Wiklander32b31802023-10-06 16:59:46 +0200819 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
820 iv_off, iv, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200821}
822#endif /* MBEDTLS_CIPHER_MODE_CFB */
823
824#if defined(MBEDTLS_CIPHER_MODE_CTR)
Jens Wiklander32b31802023-10-06 16:59:46 +0200825static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
826 unsigned char *nonce_counter, unsigned char *stream_block,
827 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +0200828{
Jens Wiklander32b31802023-10-06 16:59:46 +0200829 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
830 nonce_counter, stream_block, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +0200831}
832#endif /* MBEDTLS_CIPHER_MODE_CTR */
833
Tom Van Eyckc1633172024-04-09 18:44:13 +0200834#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander32b31802023-10-06 16:59:46 +0200835static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
836 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200837{
Jens Wiklander32b31802023-10-06 16:59:46 +0200838 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200839}
Tom Van Eyckc1633172024-04-09 18:44:13 +0200840#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200841
Jens Wiklander32b31802023-10-06 16:59:46 +0200842static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
843 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +0200844{
Jens Wiklander32b31802023-10-06 16:59:46 +0200845 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +0200846}
847
Jens Wiklander32b31802023-10-06 16:59:46 +0200848static void *camellia_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +0200849{
850 mbedtls_camellia_context *ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +0200851 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Jens Wiklander817466c2018-05-22 13:49:31 +0200852
Jens Wiklander32b31802023-10-06 16:59:46 +0200853 if (ctx == NULL) {
854 return NULL;
855 }
Jens Wiklander817466c2018-05-22 13:49:31 +0200856
Jens Wiklander32b31802023-10-06 16:59:46 +0200857 mbedtls_camellia_init(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200858
Jens Wiklander32b31802023-10-06 16:59:46 +0200859 return ctx;
Jens Wiklander817466c2018-05-22 13:49:31 +0200860}
861
Edison Aiab0eb552018-12-19 15:36:28 +0800862static void camellia_ctx_clone(void *dst, const void *src)
863{
864 memcpy(dst, src, sizeof(mbedtls_camellia_context));
865}
866
Jens Wiklander32b31802023-10-06 16:59:46 +0200867static void camellia_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +0200868{
Jens Wiklander32b31802023-10-06 16:59:46 +0200869 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
870 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200871}
872
873static const mbedtls_cipher_base_t camellia_info = {
874 MBEDTLS_CIPHER_ID_CAMELLIA,
875 camellia_crypt_ecb_wrap,
876#if defined(MBEDTLS_CIPHER_MODE_CBC)
877 camellia_crypt_cbc_wrap,
878#endif
879#if defined(MBEDTLS_CIPHER_MODE_CFB)
880 camellia_crypt_cfb128_wrap,
881#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100882#if defined(MBEDTLS_CIPHER_MODE_OFB)
883 NULL,
884#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200885#if defined(MBEDTLS_CIPHER_MODE_CTR)
886 camellia_crypt_ctr_wrap,
887#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +0100888#if defined(MBEDTLS_CIPHER_MODE_XTS)
889 NULL,
890#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200891#if defined(MBEDTLS_CIPHER_MODE_STREAM)
892 NULL,
893#endif
894 camellia_setkey_enc_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200895#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +0200896 camellia_setkey_dec_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200897#endif
Jens Wiklander817466c2018-05-22 13:49:31 +0200898 camellia_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +0800899 camellia_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +0200900 camellia_ctx_free
901};
902
903static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200904 "CAMELLIA-128-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200905 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200906 0 >> MBEDTLS_IV_SIZE_SHIFT,
907 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
908 MBEDTLS_MODE_ECB,
909 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
910 0,
911 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200912};
913
914static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200915 "CAMELLIA-192-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200916 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200917 0 >> MBEDTLS_IV_SIZE_SHIFT,
918 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
919 MBEDTLS_MODE_ECB,
920 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
921 0,
922 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200923};
924
925static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200926 "CAMELLIA-256-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +0200927 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200928 0 >> MBEDTLS_IV_SIZE_SHIFT,
929 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
930 MBEDTLS_MODE_ECB,
931 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
932 0,
933 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200934};
935
936#if defined(MBEDTLS_CIPHER_MODE_CBC)
937static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200938 "CAMELLIA-128-CBC",
939 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200940 16 >> MBEDTLS_IV_SIZE_SHIFT,
941 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
942 MBEDTLS_MODE_CBC,
943 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200944 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200945 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200946};
947
948static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200949 "CAMELLIA-192-CBC",
950 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200951 16 >> MBEDTLS_IV_SIZE_SHIFT,
952 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
953 MBEDTLS_MODE_CBC,
954 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200955 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200956 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200957};
958
959static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200960 "CAMELLIA-256-CBC",
961 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200962 16 >> MBEDTLS_IV_SIZE_SHIFT,
963 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
964 MBEDTLS_MODE_CBC,
965 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +0200966 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200967 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200968};
969#endif /* MBEDTLS_CIPHER_MODE_CBC */
970
971#if defined(MBEDTLS_CIPHER_MODE_CFB)
972static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200973 "CAMELLIA-128-CFB128",
974 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200975 16 >> MBEDTLS_IV_SIZE_SHIFT,
976 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
977 MBEDTLS_MODE_CFB,
978 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200979 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200980 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200981};
982
983static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200984 "CAMELLIA-192-CFB128",
985 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200986 16 >> MBEDTLS_IV_SIZE_SHIFT,
987 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
988 MBEDTLS_MODE_CFB,
989 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +0200990 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200991 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +0200992};
993
994static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +0200995 "CAMELLIA-256-CFB128",
996 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +0200997 16 >> MBEDTLS_IV_SIZE_SHIFT,
998 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
999 MBEDTLS_MODE_CFB,
1000 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Jens Wiklander817466c2018-05-22 13:49:31 +02001001 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001002 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001003};
1004#endif /* MBEDTLS_CIPHER_MODE_CFB */
1005
1006#if defined(MBEDTLS_CIPHER_MODE_CTR)
1007static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001008 "CAMELLIA-128-CTR",
1009 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001010 16 >> MBEDTLS_IV_SIZE_SHIFT,
1011 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1012 MBEDTLS_MODE_CTR,
1013 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +02001014 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001015 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001016};
1017
1018static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001019 "CAMELLIA-192-CTR",
1020 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001021 16 >> MBEDTLS_IV_SIZE_SHIFT,
1022 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1023 MBEDTLS_MODE_CTR,
1024 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +02001025 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001026 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001027};
1028
1029static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001030 "CAMELLIA-256-CTR",
1031 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001032 16 >> MBEDTLS_IV_SIZE_SHIFT,
1033 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1034 MBEDTLS_MODE_CTR,
1035 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Jens Wiklander817466c2018-05-22 13:49:31 +02001036 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001037 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001038};
1039#endif /* MBEDTLS_CIPHER_MODE_CTR */
1040
1041#if defined(MBEDTLS_GCM_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02001042static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1043 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001044{
Jens Wiklander32b31802023-10-06 16:59:46 +02001045 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1046 key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +02001047}
1048
1049static const mbedtls_cipher_base_t gcm_camellia_info = {
1050 MBEDTLS_CIPHER_ID_CAMELLIA,
1051 NULL,
1052#if defined(MBEDTLS_CIPHER_MODE_CBC)
1053 NULL,
1054#endif
1055#if defined(MBEDTLS_CIPHER_MODE_CFB)
1056 NULL,
1057#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001058#if defined(MBEDTLS_CIPHER_MODE_OFB)
1059 NULL,
1060#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001061#if defined(MBEDTLS_CIPHER_MODE_CTR)
1062 NULL,
1063#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001064#if defined(MBEDTLS_CIPHER_MODE_XTS)
1065 NULL,
1066#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001067#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1068 NULL,
1069#endif
1070 gcm_camellia_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001071#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +02001072 gcm_camellia_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001073#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001074 gcm_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +08001075 gcm_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +02001076 gcm_ctx_free,
1077};
1078
1079static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001080 "CAMELLIA-128-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001081 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001082 12 >> MBEDTLS_IV_SIZE_SHIFT,
1083 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1084 MBEDTLS_MODE_GCM,
1085 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
1086 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1087 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001088};
1089
1090static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001091 "CAMELLIA-192-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001092 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001093 12 >> MBEDTLS_IV_SIZE_SHIFT,
1094 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1095 MBEDTLS_MODE_GCM,
1096 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
1097 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1098 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001099};
1100
1101static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001102 "CAMELLIA-256-GCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001103 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001104 12 >> MBEDTLS_IV_SIZE_SHIFT,
1105 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1106 MBEDTLS_MODE_GCM,
1107 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
1108 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1109 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001110};
1111#endif /* MBEDTLS_GCM_C */
1112
1113#if defined(MBEDTLS_CCM_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02001114static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1115 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001116{
Jens Wiklander32b31802023-10-06 16:59:46 +02001117 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1118 key, key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +02001119}
1120
1121static const mbedtls_cipher_base_t ccm_camellia_info = {
1122 MBEDTLS_CIPHER_ID_CAMELLIA,
1123 NULL,
1124#if defined(MBEDTLS_CIPHER_MODE_CBC)
1125 NULL,
1126#endif
1127#if defined(MBEDTLS_CIPHER_MODE_CFB)
1128 NULL,
1129#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001130#if defined(MBEDTLS_CIPHER_MODE_OFB)
1131 NULL,
1132#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001133#if defined(MBEDTLS_CIPHER_MODE_CTR)
1134 NULL,
1135#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001136#if defined(MBEDTLS_CIPHER_MODE_XTS)
1137 NULL,
1138#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001139#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1140 NULL,
1141#endif
1142 ccm_camellia_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001143#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +02001144 ccm_camellia_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001145#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001146 ccm_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +08001147 ccm_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +02001148 ccm_ctx_free,
1149};
1150
1151static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001152 "CAMELLIA-128-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001153 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001154 12 >> MBEDTLS_IV_SIZE_SHIFT,
1155 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1156 MBEDTLS_MODE_CCM,
1157 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
1158 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1159 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001160};
1161
1162static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001163 "CAMELLIA-192-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001164 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001165 12 >> MBEDTLS_IV_SIZE_SHIFT,
1166 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1167 MBEDTLS_MODE_CCM,
1168 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
1169 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1170 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001171};
1172
1173static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001174 "CAMELLIA-256-CCM",
Jens Wiklander817466c2018-05-22 13:49:31 +02001175 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001176 12 >> MBEDTLS_IV_SIZE_SHIFT,
1177 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1178 MBEDTLS_MODE_CCM,
1179 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
1180 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1181 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander817466c2018-05-22 13:49:31 +02001182};
Jens Wiklander32b31802023-10-06 16:59:46 +02001183
1184static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001185 "CAMELLIA-128-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001186 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001187 12 >> MBEDTLS_IV_SIZE_SHIFT,
1188 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1189 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1190 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
1191 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1192 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001193};
1194
1195static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001196 "CAMELLIA-192-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001197 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001198 12 >> MBEDTLS_IV_SIZE_SHIFT,
1199 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1200 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1201 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
1202 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1203 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001204};
1205
1206static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001207 "CAMELLIA-256-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001208 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001209 12 >> MBEDTLS_IV_SIZE_SHIFT,
1210 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1211 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1212 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
1213 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1214 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001215};
Jens Wiklander817466c2018-05-22 13:49:31 +02001216#endif /* MBEDTLS_CCM_C */
1217
1218#endif /* MBEDTLS_CAMELLIA_C */
1219
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001220#if defined(MBEDTLS_ARIA_C)
1221
Jens Wiklander32b31802023-10-06 16:59:46 +02001222static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1223 const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001224{
1225 (void) operation;
Jens Wiklander32b31802023-10-06 16:59:46 +02001226 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1227 output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001228}
1229
1230#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +02001231static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1232 size_t length, unsigned char *iv,
1233 const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001234{
Jens Wiklander32b31802023-10-06 16:59:46 +02001235 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1236 input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001237}
1238#endif /* MBEDTLS_CIPHER_MODE_CBC */
1239
1240#if defined(MBEDTLS_CIPHER_MODE_CFB)
Jens Wiklander32b31802023-10-06 16:59:46 +02001241static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1242 size_t length, size_t *iv_off, unsigned char *iv,
1243 const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001244{
Jens Wiklander32b31802023-10-06 16:59:46 +02001245 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1246 iv_off, iv, input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001247}
1248#endif /* MBEDTLS_CIPHER_MODE_CFB */
1249
1250#if defined(MBEDTLS_CIPHER_MODE_CTR)
Jens Wiklander32b31802023-10-06 16:59:46 +02001251static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1252 unsigned char *nonce_counter, unsigned char *stream_block,
1253 const unsigned char *input, unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001254{
Jens Wiklander32b31802023-10-06 16:59:46 +02001255 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1256 nonce_counter, stream_block, input, output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001257}
1258#endif /* MBEDTLS_CIPHER_MODE_CTR */
1259
Tom Van Eyckc1633172024-04-09 18:44:13 +02001260#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander32b31802023-10-06 16:59:46 +02001261static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1262 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001263{
Jens Wiklander32b31802023-10-06 16:59:46 +02001264 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001265}
Tom Van Eyckc1633172024-04-09 18:44:13 +02001266#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001267
Jens Wiklander32b31802023-10-06 16:59:46 +02001268static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1269 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001270{
Jens Wiklander32b31802023-10-06 16:59:46 +02001271 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001272}
1273
Jens Wiklander32b31802023-10-06 16:59:46 +02001274static void *aria_ctx_alloc(void)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001275{
1276 mbedtls_aria_context *ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +02001277 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001278
Jens Wiklander32b31802023-10-06 16:59:46 +02001279 if (ctx == NULL) {
1280 return NULL;
1281 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001282
Jens Wiklander32b31802023-10-06 16:59:46 +02001283 mbedtls_aria_init(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001284
Jens Wiklander32b31802023-10-06 16:59:46 +02001285 return ctx;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001286}
1287
Jens Wiklander32b31802023-10-06 16:59:46 +02001288static void aria_ctx_free(void *ctx)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001289{
Jens Wiklander32b31802023-10-06 16:59:46 +02001290 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1291 mbedtls_free(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001292}
1293
1294static const mbedtls_cipher_base_t aria_info = {
1295 MBEDTLS_CIPHER_ID_ARIA,
1296 aria_crypt_ecb_wrap,
1297#if defined(MBEDTLS_CIPHER_MODE_CBC)
1298 aria_crypt_cbc_wrap,
1299#endif
1300#if defined(MBEDTLS_CIPHER_MODE_CFB)
1301 aria_crypt_cfb128_wrap,
1302#endif
1303#if defined(MBEDTLS_CIPHER_MODE_OFB)
1304 NULL,
1305#endif
1306#if defined(MBEDTLS_CIPHER_MODE_CTR)
1307 aria_crypt_ctr_wrap,
1308#endif
1309#if defined(MBEDTLS_CIPHER_MODE_XTS)
1310 NULL,
1311#endif
1312#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1313 NULL,
1314#endif
1315 aria_setkey_enc_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001316#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001317 aria_setkey_dec_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001318#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001319 aria_ctx_alloc,
1320 aria_ctx_free
1321};
1322
1323static const mbedtls_cipher_info_t aria_128_ecb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001324 "ARIA-128-ECB",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001325 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001326 0 >> MBEDTLS_IV_SIZE_SHIFT,
1327 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1328 MBEDTLS_MODE_ECB,
1329 MBEDTLS_CIPHER_ARIA_128_ECB,
1330 0,
1331 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001332};
1333
1334static const mbedtls_cipher_info_t aria_192_ecb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001335 "ARIA-192-ECB",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001336 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001337 0 >> MBEDTLS_IV_SIZE_SHIFT,
1338 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1339 MBEDTLS_MODE_ECB,
1340 MBEDTLS_CIPHER_ARIA_192_ECB,
1341 0,
1342 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001343};
1344
1345static const mbedtls_cipher_info_t aria_256_ecb_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001346 "ARIA-256-ECB",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001347 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001348 0 >> MBEDTLS_IV_SIZE_SHIFT,
1349 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1350 MBEDTLS_MODE_ECB,
1351 MBEDTLS_CIPHER_ARIA_256_ECB,
1352 0,
1353 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001354};
1355
1356#if defined(MBEDTLS_CIPHER_MODE_CBC)
1357static const mbedtls_cipher_info_t aria_128_cbc_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001358 "ARIA-128-CBC",
1359 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001360 16 >> MBEDTLS_IV_SIZE_SHIFT,
1361 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1362 MBEDTLS_MODE_CBC,
1363 MBEDTLS_CIPHER_ARIA_128_CBC,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001364 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001365 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001366};
1367
1368static const mbedtls_cipher_info_t aria_192_cbc_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001369 "ARIA-192-CBC",
1370 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001371 16 >> MBEDTLS_IV_SIZE_SHIFT,
1372 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1373 MBEDTLS_MODE_CBC,
1374 MBEDTLS_CIPHER_ARIA_192_CBC,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001375 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001376 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001377};
1378
1379static const mbedtls_cipher_info_t aria_256_cbc_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001380 "ARIA-256-CBC",
1381 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001382 16 >> MBEDTLS_IV_SIZE_SHIFT,
1383 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1384 MBEDTLS_MODE_CBC,
1385 MBEDTLS_CIPHER_ARIA_256_CBC,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001386 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001387 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001388};
1389#endif /* MBEDTLS_CIPHER_MODE_CBC */
1390
1391#if defined(MBEDTLS_CIPHER_MODE_CFB)
1392static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001393 "ARIA-128-CFB128",
1394 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001395 16 >> MBEDTLS_IV_SIZE_SHIFT,
1396 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1397 MBEDTLS_MODE_CFB,
1398 MBEDTLS_CIPHER_ARIA_128_CFB128,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001399 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001400 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001401};
1402
1403static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001404 "ARIA-192-CFB128",
1405 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001406 16 >> MBEDTLS_IV_SIZE_SHIFT,
1407 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1408 MBEDTLS_MODE_CFB,
1409 MBEDTLS_CIPHER_ARIA_192_CFB128,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001410 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001411 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001412};
1413
1414static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001415 "ARIA-256-CFB128",
1416 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001417 16 >> MBEDTLS_IV_SIZE_SHIFT,
1418 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1419 MBEDTLS_MODE_CFB,
1420 MBEDTLS_CIPHER_ARIA_256_CFB128,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001421 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001422 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001423};
1424#endif /* MBEDTLS_CIPHER_MODE_CFB */
1425
1426#if defined(MBEDTLS_CIPHER_MODE_CTR)
1427static const mbedtls_cipher_info_t aria_128_ctr_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001428 "ARIA-128-CTR",
1429 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001430 16 >> MBEDTLS_IV_SIZE_SHIFT,
1431 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1432 MBEDTLS_MODE_CTR,
1433 MBEDTLS_CIPHER_ARIA_128_CTR,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001434 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001435 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001436};
1437
1438static const mbedtls_cipher_info_t aria_192_ctr_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001439 "ARIA-192-CTR",
1440 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001441 16 >> MBEDTLS_IV_SIZE_SHIFT,
1442 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1443 MBEDTLS_MODE_CTR,
1444 MBEDTLS_CIPHER_ARIA_192_CTR,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001445 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001446 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001447};
1448
1449static const mbedtls_cipher_info_t aria_256_ctr_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001450 "ARIA-256-CTR",
1451 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001452 16 >> MBEDTLS_IV_SIZE_SHIFT,
1453 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1454 MBEDTLS_MODE_CTR,
1455 MBEDTLS_CIPHER_ARIA_256_CTR,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001456 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001457 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001458};
1459#endif /* MBEDTLS_CIPHER_MODE_CTR */
1460
1461#if defined(MBEDTLS_GCM_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02001462static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1463 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001464{
Jens Wiklander32b31802023-10-06 16:59:46 +02001465 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1466 key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001467}
1468
1469static const mbedtls_cipher_base_t gcm_aria_info = {
1470 MBEDTLS_CIPHER_ID_ARIA,
1471 NULL,
1472#if defined(MBEDTLS_CIPHER_MODE_CBC)
1473 NULL,
1474#endif
1475#if defined(MBEDTLS_CIPHER_MODE_CFB)
1476 NULL,
1477#endif
1478#if defined(MBEDTLS_CIPHER_MODE_OFB)
1479 NULL,
1480#endif
1481#if defined(MBEDTLS_CIPHER_MODE_CTR)
1482 NULL,
1483#endif
1484#if defined(MBEDTLS_CIPHER_MODE_XTS)
1485 NULL,
1486#endif
1487#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1488 NULL,
1489#endif
1490 gcm_aria_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001491#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001492 gcm_aria_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001493#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001494 gcm_ctx_alloc,
1495 gcm_ctx_free,
1496};
1497
1498static const mbedtls_cipher_info_t aria_128_gcm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001499 "ARIA-128-GCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001500 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001501 12 >> MBEDTLS_IV_SIZE_SHIFT,
1502 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1503 MBEDTLS_MODE_GCM,
1504 MBEDTLS_CIPHER_ARIA_128_GCM,
1505 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1506 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001507};
1508
1509static const mbedtls_cipher_info_t aria_192_gcm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001510 "ARIA-192-GCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001511 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001512 12 >> MBEDTLS_IV_SIZE_SHIFT,
1513 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1514 MBEDTLS_MODE_GCM,
1515 MBEDTLS_CIPHER_ARIA_192_GCM,
1516 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1517 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001518};
1519
1520static const mbedtls_cipher_info_t aria_256_gcm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001521 "ARIA-256-GCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001522 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001523 12 >> MBEDTLS_IV_SIZE_SHIFT,
1524 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1525 MBEDTLS_MODE_GCM,
1526 MBEDTLS_CIPHER_ARIA_256_GCM,
1527 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1528 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001529};
1530#endif /* MBEDTLS_GCM_C */
1531
1532#if defined(MBEDTLS_CCM_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02001533static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1534 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001535{
Jens Wiklander32b31802023-10-06 16:59:46 +02001536 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1537 key, key_bitlen);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001538}
1539
1540static const mbedtls_cipher_base_t ccm_aria_info = {
1541 MBEDTLS_CIPHER_ID_ARIA,
1542 NULL,
1543#if defined(MBEDTLS_CIPHER_MODE_CBC)
1544 NULL,
1545#endif
1546#if defined(MBEDTLS_CIPHER_MODE_CFB)
1547 NULL,
1548#endif
1549#if defined(MBEDTLS_CIPHER_MODE_OFB)
1550 NULL,
1551#endif
1552#if defined(MBEDTLS_CIPHER_MODE_CTR)
1553 NULL,
1554#endif
1555#if defined(MBEDTLS_CIPHER_MODE_XTS)
1556 NULL,
1557#endif
1558#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1559 NULL,
1560#endif
1561 ccm_aria_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001562#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001563 ccm_aria_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001564#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001565 ccm_ctx_alloc,
1566 ccm_ctx_free,
1567};
1568
1569static const mbedtls_cipher_info_t aria_128_ccm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001570 "ARIA-128-CCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001571 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001572 12 >> MBEDTLS_IV_SIZE_SHIFT,
1573 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1574 MBEDTLS_MODE_CCM,
1575 MBEDTLS_CIPHER_ARIA_128_CCM,
1576 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1577 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001578};
1579
1580static const mbedtls_cipher_info_t aria_192_ccm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001581 "ARIA-192-CCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001582 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001583 12 >> MBEDTLS_IV_SIZE_SHIFT,
1584 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1585 MBEDTLS_MODE_CCM,
1586 MBEDTLS_CIPHER_ARIA_192_CCM,
1587 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1588 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001589};
1590
1591static const mbedtls_cipher_info_t aria_256_ccm_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001592 "ARIA-256-CCM",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001593 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001594 12 >> MBEDTLS_IV_SIZE_SHIFT,
1595 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1596 MBEDTLS_MODE_CCM,
1597 MBEDTLS_CIPHER_ARIA_256_CCM,
1598 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1599 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001600};
Jens Wiklander32b31802023-10-06 16:59:46 +02001601
1602static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001603 "ARIA-128-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001604 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001605 12 >> MBEDTLS_IV_SIZE_SHIFT,
1606 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
1607 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1608 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
1609 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1610 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001611};
1612
1613static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001614 "ARIA-192-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001615 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001616 12 >> MBEDTLS_IV_SIZE_SHIFT,
1617 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
1618 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1619 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
1620 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1621 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001622};
1623
1624static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Jens Wiklander32b31802023-10-06 16:59:46 +02001625 "ARIA-256-CCM*-NO-TAG",
Jens Wiklander32b31802023-10-06 16:59:46 +02001626 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001627 12 >> MBEDTLS_IV_SIZE_SHIFT,
1628 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
1629 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1630 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
1631 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1632 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Jens Wiklander32b31802023-10-06 16:59:46 +02001633};
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001634#endif /* MBEDTLS_CCM_C */
1635
1636#endif /* MBEDTLS_ARIA_C */
1637
Jens Wiklander817466c2018-05-22 13:49:31 +02001638#if defined(MBEDTLS_DES_C)
1639
Jens Wiklander32b31802023-10-06 16:59:46 +02001640static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1641 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02001642{
1643 ((void) operation);
Jens Wiklander32b31802023-10-06 16:59:46 +02001644 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +02001645}
1646
Jens Wiklander32b31802023-10-06 16:59:46 +02001647static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1648 const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02001649{
1650 ((void) operation);
Jens Wiklander32b31802023-10-06 16:59:46 +02001651 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Jens Wiklander817466c2018-05-22 13:49:31 +02001652}
1653
1654#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +02001655static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1656 unsigned char *iv, const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02001657{
Jens Wiklander32b31802023-10-06 16:59:46 +02001658 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1659 output);
Jens Wiklander817466c2018-05-22 13:49:31 +02001660}
1661#endif /* MBEDTLS_CIPHER_MODE_CBC */
1662
1663#if defined(MBEDTLS_CIPHER_MODE_CBC)
Jens Wiklander32b31802023-10-06 16:59:46 +02001664static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1665 unsigned char *iv, const unsigned char *input, unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02001666{
Jens Wiklander32b31802023-10-06 16:59:46 +02001667 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1668 output);
Jens Wiklander817466c2018-05-22 13:49:31 +02001669}
1670#endif /* MBEDTLS_CIPHER_MODE_CBC */
1671
Jens Wiklander32b31802023-10-06 16:59:46 +02001672static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1673 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001674{
1675 ((void) key_bitlen);
1676
Jens Wiklander32b31802023-10-06 16:59:46 +02001677 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001678}
1679
Jens Wiklander32b31802023-10-06 16:59:46 +02001680static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1681 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001682{
1683 ((void) key_bitlen);
1684
Jens Wiklander32b31802023-10-06 16:59:46 +02001685 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001686}
1687
Jens Wiklander32b31802023-10-06 16:59:46 +02001688static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1689 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001690{
1691 ((void) key_bitlen);
1692
Jens Wiklander32b31802023-10-06 16:59:46 +02001693 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001694}
1695
Jens Wiklander32b31802023-10-06 16:59:46 +02001696static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1697 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001698{
1699 ((void) key_bitlen);
1700
Jens Wiklander32b31802023-10-06 16:59:46 +02001701 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001702}
1703
Jens Wiklander32b31802023-10-06 16:59:46 +02001704static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1705 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001706{
1707 ((void) key_bitlen);
1708
Jens Wiklander32b31802023-10-06 16:59:46 +02001709 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001710}
1711
Jens Wiklander32b31802023-10-06 16:59:46 +02001712static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1713 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02001714{
1715 ((void) key_bitlen);
1716
Jens Wiklander32b31802023-10-06 16:59:46 +02001717 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Jens Wiklander817466c2018-05-22 13:49:31 +02001718}
1719
Jens Wiklander32b31802023-10-06 16:59:46 +02001720static void *des_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +02001721{
Jens Wiklander32b31802023-10-06 16:59:46 +02001722 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Jens Wiklander817466c2018-05-22 13:49:31 +02001723
Jens Wiklander32b31802023-10-06 16:59:46 +02001724 if (des == NULL) {
1725 return NULL;
1726 }
Jens Wiklander817466c2018-05-22 13:49:31 +02001727
Jens Wiklander32b31802023-10-06 16:59:46 +02001728 mbedtls_des_init(des);
Jens Wiklander817466c2018-05-22 13:49:31 +02001729
Jens Wiklander32b31802023-10-06 16:59:46 +02001730 return des;
Jens Wiklander817466c2018-05-22 13:49:31 +02001731}
1732
Edison Aiab0eb552018-12-19 15:36:28 +08001733static void des_ctx_clone(void *dst, const void *src)
1734{
1735 memcpy(dst, src, sizeof(mbedtls_des_context));
1736}
1737
Jens Wiklander32b31802023-10-06 16:59:46 +02001738static void des_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +02001739{
Jens Wiklander32b31802023-10-06 16:59:46 +02001740 mbedtls_des_free((mbedtls_des_context *) ctx);
1741 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +02001742}
1743
Jens Wiklander32b31802023-10-06 16:59:46 +02001744static void *des3_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +02001745{
1746 mbedtls_des3_context *des3;
Jens Wiklander32b31802023-10-06 16:59:46 +02001747 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Jens Wiklander817466c2018-05-22 13:49:31 +02001748
Jens Wiklander32b31802023-10-06 16:59:46 +02001749 if (des3 == NULL) {
1750 return NULL;
1751 }
Jens Wiklander817466c2018-05-22 13:49:31 +02001752
Jens Wiklander32b31802023-10-06 16:59:46 +02001753 mbedtls_des3_init(des3);
Jens Wiklander817466c2018-05-22 13:49:31 +02001754
Jens Wiklander32b31802023-10-06 16:59:46 +02001755 return des3;
Jens Wiklander817466c2018-05-22 13:49:31 +02001756}
1757
Edison Aiab0eb552018-12-19 15:36:28 +08001758static void des3_ctx_clone(void *dst, const void *src)
1759{
1760 memcpy(dst, src, sizeof(mbedtls_des3_context));
1761}
1762
Jens Wiklander32b31802023-10-06 16:59:46 +02001763static void des3_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +02001764{
Jens Wiklander32b31802023-10-06 16:59:46 +02001765 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1766 mbedtls_free(ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +02001767}
1768
1769static const mbedtls_cipher_base_t des_info = {
1770 MBEDTLS_CIPHER_ID_DES,
1771 des_crypt_ecb_wrap,
1772#if defined(MBEDTLS_CIPHER_MODE_CBC)
1773 des_crypt_cbc_wrap,
1774#endif
1775#if defined(MBEDTLS_CIPHER_MODE_CFB)
1776 NULL,
1777#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001778#if defined(MBEDTLS_CIPHER_MODE_OFB)
1779 NULL,
1780#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001781#if defined(MBEDTLS_CIPHER_MODE_CTR)
1782 NULL,
1783#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001784#if defined(MBEDTLS_CIPHER_MODE_XTS)
1785 NULL,
1786#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001787#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1788 NULL,
1789#endif
1790 des_setkey_enc_wrap,
1791 des_setkey_dec_wrap,
1792 des_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +08001793 des_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +02001794 des_ctx_free
1795};
1796
1797static const mbedtls_cipher_info_t des_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001798 "DES-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +02001799 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001800 0 >> MBEDTLS_IV_SIZE_SHIFT,
1801 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
1802 MBEDTLS_MODE_ECB,
1803 MBEDTLS_CIPHER_DES_ECB,
1804 0,
1805 MBEDTLS_CIPHER_BASE_INDEX_DES
Jens Wiklander817466c2018-05-22 13:49:31 +02001806};
1807
1808#if defined(MBEDTLS_CIPHER_MODE_CBC)
1809static const mbedtls_cipher_info_t des_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001810 "DES-CBC",
1811 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001812 8 >> MBEDTLS_IV_SIZE_SHIFT,
1813 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
1814 MBEDTLS_MODE_CBC,
1815 MBEDTLS_CIPHER_DES_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +02001816 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001817 MBEDTLS_CIPHER_BASE_INDEX_DES
Jens Wiklander817466c2018-05-22 13:49:31 +02001818};
1819#endif /* MBEDTLS_CIPHER_MODE_CBC */
1820
1821static const mbedtls_cipher_base_t des_ede_info = {
1822 MBEDTLS_CIPHER_ID_DES,
1823 des3_crypt_ecb_wrap,
1824#if defined(MBEDTLS_CIPHER_MODE_CBC)
1825 des3_crypt_cbc_wrap,
1826#endif
1827#if defined(MBEDTLS_CIPHER_MODE_CFB)
1828 NULL,
1829#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001830#if defined(MBEDTLS_CIPHER_MODE_OFB)
1831 NULL,
1832#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001833#if defined(MBEDTLS_CIPHER_MODE_CTR)
1834 NULL,
1835#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001836#if defined(MBEDTLS_CIPHER_MODE_XTS)
1837 NULL,
1838#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001839#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1840 NULL,
1841#endif
1842 des3_set2key_enc_wrap,
1843 des3_set2key_dec_wrap,
1844 des3_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +08001845 des3_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +02001846 des3_ctx_free
1847};
1848
1849static const mbedtls_cipher_info_t des_ede_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001850 "DES-EDE-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +02001851 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001852 0 >> MBEDTLS_IV_SIZE_SHIFT,
1853 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
1854 MBEDTLS_MODE_ECB,
1855 MBEDTLS_CIPHER_DES_EDE_ECB,
1856 0,
1857 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Jens Wiklander817466c2018-05-22 13:49:31 +02001858};
1859
1860#if defined(MBEDTLS_CIPHER_MODE_CBC)
1861static const mbedtls_cipher_info_t des_ede_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001862 "DES-EDE-CBC",
1863 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001864 8 >> MBEDTLS_IV_SIZE_SHIFT,
1865 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
1866 MBEDTLS_MODE_CBC,
1867 MBEDTLS_CIPHER_DES_EDE_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +02001868 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001869 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Jens Wiklander817466c2018-05-22 13:49:31 +02001870};
1871#endif /* MBEDTLS_CIPHER_MODE_CBC */
1872
1873static const mbedtls_cipher_base_t des_ede3_info = {
1874 MBEDTLS_CIPHER_ID_3DES,
1875 des3_crypt_ecb_wrap,
1876#if defined(MBEDTLS_CIPHER_MODE_CBC)
1877 des3_crypt_cbc_wrap,
1878#endif
1879#if defined(MBEDTLS_CIPHER_MODE_CFB)
1880 NULL,
1881#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001882#if defined(MBEDTLS_CIPHER_MODE_OFB)
1883 NULL,
1884#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001885#if defined(MBEDTLS_CIPHER_MODE_CTR)
1886 NULL,
1887#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001888#if defined(MBEDTLS_CIPHER_MODE_XTS)
1889 NULL,
1890#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02001891#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1892 NULL,
1893#endif
1894 des3_set3key_enc_wrap,
1895 des3_set3key_dec_wrap,
1896 des3_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +08001897 des3_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +02001898 des3_ctx_free
1899};
1900
1901static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001902 "DES-EDE3-ECB",
Jens Wiklander817466c2018-05-22 13:49:31 +02001903 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001904 0 >> MBEDTLS_IV_SIZE_SHIFT,
1905 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
1906 MBEDTLS_MODE_ECB,
1907 MBEDTLS_CIPHER_DES_EDE3_ECB,
1908 0,
1909 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Jens Wiklander817466c2018-05-22 13:49:31 +02001910};
1911#if defined(MBEDTLS_CIPHER_MODE_CBC)
1912static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02001913 "DES-EDE3-CBC",
1914 8,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001915 8 >> MBEDTLS_IV_SIZE_SHIFT,
1916 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
1917 MBEDTLS_MODE_CBC,
1918 MBEDTLS_CIPHER_DES_EDE3_CBC,
Jens Wiklander817466c2018-05-22 13:49:31 +02001919 0,
Tom Van Eyckc1633172024-04-09 18:44:13 +02001920 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Jens Wiklander817466c2018-05-22 13:49:31 +02001921};
1922#endif /* MBEDTLS_CIPHER_MODE_CBC */
1923#endif /* MBEDTLS_DES_C */
1924
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001925#if defined(MBEDTLS_CHACHA20_C)
1926
Jens Wiklander32b31802023-10-06 16:59:46 +02001927static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1928 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001929{
Jens Wiklander32b31802023-10-06 16:59:46 +02001930 if (key_bitlen != 256U) {
1931 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1932 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001933
Jens Wiklander32b31802023-10-06 16:59:46 +02001934 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1935 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1936 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001937
Jens Wiklander32b31802023-10-06 16:59:46 +02001938 return 0;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001939}
1940
Jens Wiklander32b31802023-10-06 16:59:46 +02001941static int chacha20_stream_wrap(void *ctx, size_t length,
1942 const unsigned char *input,
1943 unsigned char *output)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001944{
Jerome Forissier11fa71b2020-04-20 17:17:56 +02001945 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001946
Jens Wiklander32b31802023-10-06 16:59:46 +02001947 ret = mbedtls_chacha20_update(ctx, length, input, output);
1948 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1949 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1950 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001951
Jens Wiklander32b31802023-10-06 16:59:46 +02001952 return ret;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001953}
1954
Jens Wiklander32b31802023-10-06 16:59:46 +02001955static void *chacha20_ctx_alloc(void)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001956{
1957 mbedtls_chacha20_context *ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +02001958 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001959
Jens Wiklander32b31802023-10-06 16:59:46 +02001960 if (ctx == NULL) {
1961 return NULL;
1962 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001963
Jens Wiklander32b31802023-10-06 16:59:46 +02001964 mbedtls_chacha20_init(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001965
Jens Wiklander32b31802023-10-06 16:59:46 +02001966 return ctx;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001967}
1968
Simon Ottaa584f92022-10-26 11:38:24 +02001969static void chacha20_ctx_clone(void *dst, const void *src)
1970{
1971 memcpy(dst, src, sizeof(mbedtls_chacha20_context));
1972}
1973
Jens Wiklander32b31802023-10-06 16:59:46 +02001974static void chacha20_ctx_free(void *ctx)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001975{
Jens Wiklander32b31802023-10-06 16:59:46 +02001976 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1977 mbedtls_free(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01001978}
1979
1980static const mbedtls_cipher_base_t chacha20_base_info = {
1981 MBEDTLS_CIPHER_ID_CHACHA20,
1982 NULL,
1983#if defined(MBEDTLS_CIPHER_MODE_CBC)
1984 NULL,
1985#endif
1986#if defined(MBEDTLS_CIPHER_MODE_CFB)
1987 NULL,
1988#endif
1989#if defined(MBEDTLS_CIPHER_MODE_OFB)
1990 NULL,
1991#endif
1992#if defined(MBEDTLS_CIPHER_MODE_CTR)
1993 NULL,
1994#endif
1995#if defined(MBEDTLS_CIPHER_MODE_XTS)
1996 NULL,
1997#endif
1998#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1999 chacha20_stream_wrap,
2000#endif
2001 chacha20_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002002#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002003 chacha20_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002004#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002005 chacha20_ctx_alloc,
Simon Ottaa584f92022-10-26 11:38:24 +02002006 chacha20_ctx_clone,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002007 chacha20_ctx_free
2008};
2009static const mbedtls_cipher_info_t chacha20_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002010 "CHACHA20",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002011 1,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002012 12 >> MBEDTLS_IV_SIZE_SHIFT,
2013 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
2014 MBEDTLS_MODE_STREAM,
2015 MBEDTLS_CIPHER_CHACHA20,
2016 0,
2017 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002018};
2019#endif /* MBEDTLS_CHACHA20_C */
2020
2021#if defined(MBEDTLS_CHACHAPOLY_C)
2022
Jens Wiklander32b31802023-10-06 16:59:46 +02002023static int chachapoly_setkey_wrap(void *ctx,
2024 const unsigned char *key,
2025 unsigned int key_bitlen)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002026{
Jens Wiklander32b31802023-10-06 16:59:46 +02002027 if (key_bitlen != 256U) {
2028 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
2029 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002030
Jens Wiklander32b31802023-10-06 16:59:46 +02002031 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
2032 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
2033 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002034
Jens Wiklander32b31802023-10-06 16:59:46 +02002035 return 0;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002036}
2037
Jens Wiklander32b31802023-10-06 16:59:46 +02002038static void *chachapoly_ctx_alloc(void)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002039{
2040 mbedtls_chachapoly_context *ctx;
Jens Wiklander32b31802023-10-06 16:59:46 +02002041 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002042
Jens Wiklander32b31802023-10-06 16:59:46 +02002043 if (ctx == NULL) {
2044 return NULL;
2045 }
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002046
Jens Wiklander32b31802023-10-06 16:59:46 +02002047 mbedtls_chachapoly_init(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002048
Jens Wiklander32b31802023-10-06 16:59:46 +02002049 return ctx;
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002050}
2051
Simon Ottaa584f92022-10-26 11:38:24 +02002052static void chachapoly_ctx_clone(void *dst, const void *src)
2053{
2054 memcpy(dst, src, sizeof(mbedtls_chachapoly_context));
2055}
2056
Jens Wiklander32b31802023-10-06 16:59:46 +02002057static void chachapoly_ctx_free(void *ctx)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002058{
Jens Wiklander32b31802023-10-06 16:59:46 +02002059 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
2060 mbedtls_free(ctx);
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002061}
2062
2063static const mbedtls_cipher_base_t chachapoly_base_info = {
2064 MBEDTLS_CIPHER_ID_CHACHA20,
2065 NULL,
2066#if defined(MBEDTLS_CIPHER_MODE_CBC)
2067 NULL,
2068#endif
2069#if defined(MBEDTLS_CIPHER_MODE_CFB)
2070 NULL,
2071#endif
2072#if defined(MBEDTLS_CIPHER_MODE_OFB)
2073 NULL,
2074#endif
2075#if defined(MBEDTLS_CIPHER_MODE_CTR)
2076 NULL,
2077#endif
2078#if defined(MBEDTLS_CIPHER_MODE_XTS)
2079 NULL,
2080#endif
2081#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2082 NULL,
2083#endif
2084 chachapoly_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002085#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002086 chachapoly_setkey_wrap,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002087#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002088 chachapoly_ctx_alloc,
Simon Ottaa584f92022-10-26 11:38:24 +02002089 chachapoly_ctx_clone,
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002090 chachapoly_ctx_free
2091};
2092static const mbedtls_cipher_info_t chachapoly_info = {
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002093 "CHACHA20-POLY1305",
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002094 1,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002095 12 >> MBEDTLS_IV_SIZE_SHIFT,
2096 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
2097 MBEDTLS_MODE_CHACHAPOLY,
2098 MBEDTLS_CIPHER_CHACHA20_POLY1305,
2099 0,
2100 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002101};
2102#endif /* MBEDTLS_CHACHAPOLY_C */
2103
Jens Wiklander817466c2018-05-22 13:49:31 +02002104#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Jens Wiklander32b31802023-10-06 16:59:46 +02002105static int null_crypt_stream(void *ctx, size_t length,
2106 const unsigned char *input,
2107 unsigned char *output)
Jens Wiklander817466c2018-05-22 13:49:31 +02002108{
2109 ((void) ctx);
Jens Wiklander32b31802023-10-06 16:59:46 +02002110 memmove(output, input, length);
2111 return 0;
Jens Wiklander817466c2018-05-22 13:49:31 +02002112}
2113
Jens Wiklander32b31802023-10-06 16:59:46 +02002114static int null_setkey(void *ctx, const unsigned char *key,
2115 unsigned int key_bitlen)
Jens Wiklander817466c2018-05-22 13:49:31 +02002116{
2117 ((void) ctx);
2118 ((void) key);
2119 ((void) key_bitlen);
2120
Jens Wiklander32b31802023-10-06 16:59:46 +02002121 return 0;
Jens Wiklander817466c2018-05-22 13:49:31 +02002122}
2123
Jens Wiklander32b31802023-10-06 16:59:46 +02002124static void *null_ctx_alloc(void)
Jens Wiklander817466c2018-05-22 13:49:31 +02002125{
Jens Wiklander32b31802023-10-06 16:59:46 +02002126 return (void *) 1;
Jens Wiklander817466c2018-05-22 13:49:31 +02002127}
2128
Edison Aiab0eb552018-12-19 15:36:28 +08002129static void null_ctx_clone(void *dst, const void *src)
2130{
2131 ((void) dst);
2132 ((void) src);
2133}
2134
Jens Wiklander32b31802023-10-06 16:59:46 +02002135static void null_ctx_free(void *ctx)
Jens Wiklander817466c2018-05-22 13:49:31 +02002136{
2137 ((void) ctx);
2138}
2139
2140static const mbedtls_cipher_base_t null_base_info = {
2141 MBEDTLS_CIPHER_ID_NULL,
2142 NULL,
2143#if defined(MBEDTLS_CIPHER_MODE_CBC)
2144 NULL,
2145#endif
2146#if defined(MBEDTLS_CIPHER_MODE_CFB)
2147 NULL,
2148#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002149#if defined(MBEDTLS_CIPHER_MODE_OFB)
2150 NULL,
2151#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002152#if defined(MBEDTLS_CIPHER_MODE_CTR)
2153 NULL,
2154#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002155#if defined(MBEDTLS_CIPHER_MODE_XTS)
2156 NULL,
2157#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002158#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2159 null_crypt_stream,
2160#endif
2161 null_setkey,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002162#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Jens Wiklander817466c2018-05-22 13:49:31 +02002163 null_setkey,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002164#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002165 null_ctx_alloc,
Edison Aiab0eb552018-12-19 15:36:28 +08002166 null_ctx_clone,
Jens Wiklander817466c2018-05-22 13:49:31 +02002167 null_ctx_free
2168};
2169
2170static const mbedtls_cipher_info_t null_cipher_info = {
Jens Wiklander817466c2018-05-22 13:49:31 +02002171 "NULL",
Jens Wiklander817466c2018-05-22 13:49:31 +02002172 1,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002173 0 >> MBEDTLS_IV_SIZE_SHIFT,
2174 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
2175 MBEDTLS_MODE_STREAM,
2176 MBEDTLS_CIPHER_NULL,
2177 0,
2178 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Jens Wiklander817466c2018-05-22 13:49:31 +02002179};
2180#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
2181
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002182#if defined(MBEDTLS_NIST_KW_C)
Jens Wiklander32b31802023-10-06 16:59:46 +02002183static void *kw_ctx_alloc(void)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002184{
Jens Wiklander32b31802023-10-06 16:59:46 +02002185 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002186
Jens Wiklander32b31802023-10-06 16:59:46 +02002187 if (ctx != NULL) {
2188 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2189 }
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002190
Jens Wiklander32b31802023-10-06 16:59:46 +02002191 return ctx;
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002192}
2193
Jens Wiklander27df5c92023-05-12 16:00:18 +02002194static void kw_ctx_clone(void *dst, const void *src)
2195{
2196 memcpy(dst, src, sizeof(mbedtls_nist_kw_context));
2197}
2198
Jens Wiklander32b31802023-10-06 16:59:46 +02002199static void kw_ctx_free(void *ctx)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002200{
Jens Wiklander32b31802023-10-06 16:59:46 +02002201 mbedtls_nist_kw_free(ctx);
2202 mbedtls_free(ctx);
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002203}
2204
Jens Wiklander32b31802023-10-06 16:59:46 +02002205static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2206 unsigned int key_bitlen)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002207{
Jens Wiklander32b31802023-10-06 16:59:46 +02002208 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2209 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002210}
2211
Jens Wiklander32b31802023-10-06 16:59:46 +02002212static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2213 unsigned int key_bitlen)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002214{
Jens Wiklander32b31802023-10-06 16:59:46 +02002215 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2216 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002217}
2218
2219static const mbedtls_cipher_base_t kw_aes_info = {
2220 MBEDTLS_CIPHER_ID_AES,
2221 NULL,
2222#if defined(MBEDTLS_CIPHER_MODE_CBC)
2223 NULL,
2224#endif
2225#if defined(MBEDTLS_CIPHER_MODE_CFB)
2226 NULL,
2227#endif
2228#if defined(MBEDTLS_CIPHER_MODE_OFB)
2229 NULL,
2230#endif
2231#if defined(MBEDTLS_CIPHER_MODE_CTR)
2232 NULL,
2233#endif
2234#if defined(MBEDTLS_CIPHER_MODE_XTS)
2235 NULL,
2236#endif
2237#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2238 NULL,
2239#endif
2240 kw_aes_setkey_wrap,
2241 kw_aes_setkey_unwrap,
2242 kw_ctx_alloc,
Jens Wiklander27df5c92023-05-12 16:00:18 +02002243 kw_ctx_clone,
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002244 kw_ctx_free,
2245};
2246
2247static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002248 "AES-128-KW",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002249 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002250 0 >> MBEDTLS_IV_SIZE_SHIFT,
2251 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
2252 MBEDTLS_MODE_KW,
2253 MBEDTLS_CIPHER_AES_128_KW,
2254 0,
2255 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002256};
2257
Tom Van Eyckc1633172024-04-09 18:44:13 +02002258#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002259static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002260 "AES-192-KW",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002261 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002262 0 >> MBEDTLS_IV_SIZE_SHIFT,
2263 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
2264 MBEDTLS_MODE_KW,
2265 MBEDTLS_CIPHER_AES_192_KW,
2266 0,
2267 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002268};
2269
2270static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002271 "AES-256-KW",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002272 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002273 0 >> MBEDTLS_IV_SIZE_SHIFT,
2274 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
2275 MBEDTLS_MODE_KW,
2276 MBEDTLS_CIPHER_AES_256_KW,
2277 0,
2278 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002279};
Tom Van Eyckc1633172024-04-09 18:44:13 +02002280#endif
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002281
2282static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002283 "AES-128-KWP",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002284 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002285 0 >> MBEDTLS_IV_SIZE_SHIFT,
2286 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
2287 MBEDTLS_MODE_KWP,
2288 MBEDTLS_CIPHER_AES_128_KWP,
2289 0,
2290 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002291};
2292
Tom Van Eyckc1633172024-04-09 18:44:13 +02002293#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002294static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002295 "AES-192-KWP",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002296 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002297 0 >> MBEDTLS_IV_SIZE_SHIFT,
2298 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
2299 MBEDTLS_MODE_KWP,
2300 MBEDTLS_CIPHER_AES_192_KWP,
2301 0,
2302 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002303};
2304
2305static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002306 "AES-256-KWP",
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002307 16,
Tom Van Eyckc1633172024-04-09 18:44:13 +02002308 0 >> MBEDTLS_IV_SIZE_SHIFT,
2309 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
2310 MBEDTLS_MODE_KWP,
2311 MBEDTLS_CIPHER_AES_256_KWP,
2312 0,
2313 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002314};
Tom Van Eyckc1633172024-04-09 18:44:13 +02002315#endif
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002316#endif /* MBEDTLS_NIST_KW_C */
2317
Jens Wiklander817466c2018-05-22 13:49:31 +02002318const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
2319{
2320#if defined(MBEDTLS_AES_C)
2321 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002322#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002323 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2324 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002325#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002326#if defined(MBEDTLS_CIPHER_MODE_CBC)
2327 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002328#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002329 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2330 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
2331#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002332#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002333#if defined(MBEDTLS_CIPHER_MODE_CFB)
2334 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002335#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002336 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2337 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
2338#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002339#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002340#if defined(MBEDTLS_CIPHER_MODE_OFB)
2341 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002342#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002343 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2344 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2345#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002346#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002347#if defined(MBEDTLS_CIPHER_MODE_CTR)
2348 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002349#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002350 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2351 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
2352#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002353#endif
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002354#if defined(MBEDTLS_CIPHER_MODE_XTS)
2355 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002356#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002357 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2358#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002359#endif
2360#endif /* MBEDTLS_AES_C */
2361#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +02002362 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002363#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002364 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2365 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
2366#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002367#endif
2368#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander817466c2018-05-22 13:49:31 +02002369 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002370#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander817466c2018-05-22 13:49:31 +02002371 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2372 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002373#endif
2374#endif
2375#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Jens Wiklander32b31802023-10-06 16:59:46 +02002376 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002377#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jens Wiklander32b31802023-10-06 16:59:46 +02002378 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2379 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Jens Wiklander817466c2018-05-22 13:49:31 +02002380#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002381#endif
Jens Wiklander817466c2018-05-22 13:49:31 +02002382
Jens Wiklander817466c2018-05-22 13:49:31 +02002383#if defined(MBEDTLS_CAMELLIA_C)
2384 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2385 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2386 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2387#if defined(MBEDTLS_CIPHER_MODE_CBC)
2388 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2389 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2390 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
2391#endif
2392#if defined(MBEDTLS_CIPHER_MODE_CFB)
2393 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2394 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2395 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
2396#endif
2397#if defined(MBEDTLS_CIPHER_MODE_CTR)
2398 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2399 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2400 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
2401#endif
2402#if defined(MBEDTLS_GCM_C)
2403 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2404 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2405 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
2406#endif
2407#if defined(MBEDTLS_CCM_C)
2408 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2409 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2410 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Jens Wiklander32b31802023-10-06 16:59:46 +02002411 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2412 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2413 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Jens Wiklander817466c2018-05-22 13:49:31 +02002414#endif
2415#endif /* MBEDTLS_CAMELLIA_C */
2416
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002417#if defined(MBEDTLS_ARIA_C)
2418 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2419 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2420 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2421#if defined(MBEDTLS_CIPHER_MODE_CBC)
2422 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2423 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2424 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2425#endif
2426#if defined(MBEDTLS_CIPHER_MODE_CFB)
2427 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2428 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2429 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2430#endif
2431#if defined(MBEDTLS_CIPHER_MODE_CTR)
2432 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2433 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2434 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2435#endif
2436#if defined(MBEDTLS_GCM_C)
2437 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2438 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2439 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2440#endif
2441#if defined(MBEDTLS_CCM_C)
2442 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2443 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2444 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Jens Wiklander32b31802023-10-06 16:59:46 +02002445 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2446 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2447 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002448#endif
2449#endif /* MBEDTLS_ARIA_C */
2450
Jens Wiklander817466c2018-05-22 13:49:31 +02002451#if defined(MBEDTLS_DES_C)
2452 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2453 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2454 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2455#if defined(MBEDTLS_CIPHER_MODE_CBC)
2456 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2457 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2458 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
2459#endif
2460#endif /* MBEDTLS_DES_C */
2461
Jens Wiklander3d3b0592019-03-20 15:30:29 +01002462#if defined(MBEDTLS_CHACHA20_C)
2463 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2464#endif
2465
2466#if defined(MBEDTLS_CHACHAPOLY_C)
2467 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
2468#endif
2469
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002470#if defined(MBEDTLS_NIST_KW_C)
2471 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002472#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002473 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2474 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002475#endif
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002476 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Tom Van Eyckc1633172024-04-09 18:44:13 +02002477#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002478 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2479 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2480#endif
Tom Van Eyckc1633172024-04-09 18:44:13 +02002481#endif
Jerome Forissier11fa71b2020-04-20 17:17:56 +02002482
Jens Wiklander817466c2018-05-22 13:49:31 +02002483#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2484 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2485#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
2486
2487 { MBEDTLS_CIPHER_NONE, NULL }
2488};
2489
Jens Wiklander32b31802023-10-06 16:59:46 +02002490#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2491 sizeof(mbedtls_cipher_definitions[0]))
Jens Wiklander817466c2018-05-22 13:49:31 +02002492int mbedtls_cipher_supported[NUM_CIPHERS];
2493
Tom Van Eyckc1633172024-04-09 18:44:13 +02002494const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
2495#if defined(MBEDTLS_AES_C)
2496 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
2497#endif
2498#if defined(MBEDTLS_ARIA_C)
2499 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
2500#endif
2501#if defined(MBEDTLS_CAMELLIA_C)
2502 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
2503#endif
2504#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
2505 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
2506#endif
2507#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
2508 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
2509#endif
2510#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
2511 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
2512#endif
2513#if defined(MBEDTLS_CHACHA20_C)
2514 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
2515#endif
2516#if defined(MBEDTLS_CHACHAPOLY_C)
2517 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
2518#endif
2519#if defined(MBEDTLS_DES_C)
2520 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
2521#endif
2522#if defined(MBEDTLS_DES_C)
2523 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
2524#endif
2525#if defined(MBEDTLS_DES_C)
2526 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
2527#endif
2528#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
2529 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
2530#endif
2531#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
2532 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
2533#endif
2534#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
2535 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
2536#endif
2537#if defined(MBEDTLS_NIST_KW_C)
2538 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
2539#endif
2540#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2541 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
2542#endif
2543#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
2544 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
2545#endif
2546};
2547
Jens Wiklander817466c2018-05-22 13:49:31 +02002548#endif /* MBEDTLS_CIPHER_C */