blob: b4c21ee3954b086bd2c3fa129c535615904b9ef7 [file] [log] [blame]
Paul Bakker8123e9d2011-01-06 15:37:30 +00001/**
Paul Bakkerfae35f02013-03-13 10:33:51 +01002 * \file cipher_wrap.c
Paul Bakker9af723c2014-05-01 13:03:14 +02003 *
Gilles Peskinee820c0a2023-08-03 17:45:20 +02004 * \brief Generic cipher wrapper for Mbed TLS
Paul Bakker8123e9d2011-01-06 15:37:30 +00005 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
7 *
Bence Szépkúti1e148272020-08-07 13:07:28 +02008 * Copyright The Mbed TLS Contributors
Dave Rodgman16799db2023-11-02 19:47:20 +00009 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Paul Bakker8123e9d2011-01-06 15:37:30 +000010 */
11
Gilles Peskinedb09ef62020-06-03 01:43:33 +020012#include "common.h"
Paul Bakker8123e9d2011-01-06 15:37:30 +000013
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020014#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000015
Chris Jonesdaacb592021-03-09 17:03:29 +000016#include "cipher_wrap.h"
Janos Follath24eed8d2019-11-22 13:21:35 +000017#include "mbedtls/error.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000018
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +020019#if defined(MBEDTLS_CHACHAPOLY_C)
20#include "mbedtls/chachapoly.h"
Daniel King8fe47012016-05-17 20:33:28 -030021#endif
22
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020023#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000024#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000025#endif
26
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020027#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000028#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000029#endif
30
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000031#if defined(MBEDTLS_ARIA_C)
32#include "mbedtls/aria.h"
33#endif
34
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000036#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000037#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000038
Daniel Kingbd920622016-05-15 19:56:20 -030039#if defined(MBEDTLS_CHACHA20_C)
40#include "mbedtls/chacha20.h"
41#endif
42
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020043#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000044#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020045#endif
46
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000048#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020049#endif
50
Jack Lloydffdf2882019-03-07 17:00:32 -050051#if defined(MBEDTLS_NIST_KW_C)
52#include "mbedtls/nist_kw.h"
53#endif
54
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000056#include <string.h>
57#endif
58
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000059#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020060
Dave Rodgman25d77cb2023-06-24 22:58:51 +010061enum mbedtls_cipher_base_index {
62#if defined(MBEDTLS_AES_C)
63 MBEDTLS_CIPHER_BASE_INDEX_AES,
64#endif
65#if defined(MBEDTLS_ARIA_C)
66 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
67#endif
68#if defined(MBEDTLS_CAMELLIA_C)
69 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
70#endif
Valerio Settidcee9872023-10-16 11:35:57 +020071#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Dave Rodgman25d77cb2023-06-24 22:58:51 +010072 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
73#endif
74#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
75 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
76#endif
77#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
78 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
79#endif
80#if defined(MBEDTLS_CHACHA20_C)
81 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
82#endif
83#if defined(MBEDTLS_CHACHAPOLY_C)
84 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
85#endif
86#if defined(MBEDTLS_DES_C)
87 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
88#endif
89#if defined(MBEDTLS_DES_C)
90 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
91#endif
92#if defined(MBEDTLS_DES_C)
93 MBEDTLS_CIPHER_BASE_INDEX_DES,
94#endif
Valerio Settidcee9872023-10-16 11:35:57 +020095#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Dave Rodgman25d77cb2023-06-24 22:58:51 +010096 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
97#endif
98#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
99 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
100#endif
101#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
102 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
103#endif
104#if defined(MBEDTLS_NIST_KW_C)
105 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
106#endif
107#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
108 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
109#endif
110#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100111 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100112#endif
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100113 /* Prevent compile failure due to empty enum */
Dave Rodgmane3330f82023-08-14 15:26:28 +0100114 MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100115};
Dave Rodgmande3de772023-06-24 12:51:06 +0100116
Valerio Setti50333972023-12-19 11:17:14 +0100117#if defined(MBEDTLS_GCM_C) && \
118 (defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA) || \
119 defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200120/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100121static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200122{
Gilles Peskine449bd832023-01-11 14:50:10 +0100123 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200124
Gilles Peskine449bd832023-01-11 14:50:10 +0100125 if (ctx != NULL) {
126 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
127 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200128
Gilles Peskine449bd832023-01-11 14:50:10 +0100129 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200130}
131
Gilles Peskine449bd832023-01-11 14:50:10 +0100132static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200133{
Gilles Peskine449bd832023-01-11 14:50:10 +0100134 mbedtls_gcm_free(ctx);
135 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200136}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200137#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200138
Valerio Setti50333972023-12-19 11:17:14 +0100139#if defined(MBEDTLS_CCM_C) && \
140 (defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA) || \
141 defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200142/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100143static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200144{
Gilles Peskine449bd832023-01-11 14:50:10 +0100145 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200146
Gilles Peskine449bd832023-01-11 14:50:10 +0100147 if (ctx != NULL) {
148 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
149 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200150
Gilles Peskine449bd832023-01-11 14:50:10 +0100151 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200152}
153
Gilles Peskine449bd832023-01-11 14:50:10 +0100154static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200155{
Gilles Peskine449bd832023-01-11 14:50:10 +0100156 mbedtls_ccm_free(ctx);
157 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200158}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200159#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200160
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200161#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000162
Gilles Peskine449bd832023-01-11 14:50:10 +0100163static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
164 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200165{
Gilles Peskine449bd832023-01-11 14:50:10 +0100166 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200167}
168
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200169#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100170static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
171 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000172{
Gilles Peskine449bd832023-01-11 14:50:10 +0100173 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
174 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000175}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200176#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000177
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200178#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100179static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
180 size_t length, size_t *iv_off, unsigned char *iv,
181 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000182{
Gilles Peskine449bd832023-01-11 14:50:10 +0100183 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
184 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000185}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200186#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000187
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100188#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100189static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
190 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100191{
Gilles Peskine449bd832023-01-11 14:50:10 +0100192 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
193 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100194}
195#endif /* MBEDTLS_CIPHER_MODE_OFB */
196
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200197#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100198static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
199 unsigned char *nonce_counter, unsigned char *stream_block,
200 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000201{
Gilles Peskine449bd832023-01-11 14:50:10 +0100202 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
203 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000204}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200205#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000206
Jaeden Ameroc6539902018-04-30 17:17:41 +0100207#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100208static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
209 size_t length,
210 const unsigned char data_unit[16],
211 const unsigned char *input,
212 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100213{
214 mbedtls_aes_xts_context *xts_ctx = ctx;
215 int mode;
216
Gilles Peskine449bd832023-01-11 14:50:10 +0100217 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100218 case MBEDTLS_ENCRYPT:
219 mode = MBEDTLS_AES_ENCRYPT;
220 break;
221 case MBEDTLS_DECRYPT:
222 mode = MBEDTLS_AES_DECRYPT;
223 break;
224 default:
225 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
226 }
227
Gilles Peskine449bd832023-01-11 14:50:10 +0100228 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
229 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100230}
231#endif /* MBEDTLS_CIPHER_MODE_XTS */
232
Yanray Wangb67b4742023-10-31 17:10:32 +0800233#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +0100234static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
235 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000236{
Gilles Peskine449bd832023-01-11 14:50:10 +0100237 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000238}
Yanray Wangdb9b3092023-08-24 15:47:53 +0800239#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +0000240
Gilles Peskine449bd832023-01-11 14:50:10 +0100241static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
242 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000243{
Gilles Peskine449bd832023-01-11 14:50:10 +0100244 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000245}
246
Gilles Peskine449bd832023-01-11 14:50:10 +0100247static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000248{
Gilles Peskine449bd832023-01-11 14:50:10 +0100249 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200250
Gilles Peskine449bd832023-01-11 14:50:10 +0100251 if (aes == NULL) {
252 return NULL;
253 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200254
Gilles Peskine449bd832023-01-11 14:50:10 +0100255 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200256
Gilles Peskine449bd832023-01-11 14:50:10 +0100257 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000258}
259
Gilles Peskine449bd832023-01-11 14:50:10 +0100260static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000261{
Gilles Peskine449bd832023-01-11 14:50:10 +0100262 mbedtls_aes_free((mbedtls_aes_context *) ctx);
263 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000264}
265
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200266static const mbedtls_cipher_base_t aes_info = {
267 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200268 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200269#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000270 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100271#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200272#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000273 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100274#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100275#if defined(MBEDTLS_CIPHER_MODE_OFB)
276 aes_crypt_ofb_wrap,
277#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200278#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000279 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100280#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100281#if defined(MBEDTLS_CIPHER_MODE_XTS)
282 NULL,
283#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200284#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200285 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100286#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000287 aes_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800288#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker343a8702011-06-09 14:27:58 +0000289 aes_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800290#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000291 aes_ctx_alloc,
292 aes_ctx_free
293};
294
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200295static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100296 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100297 16,
298 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100299 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100300 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100301 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200302 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100303 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200304};
305
Yanray Wang7732ced2023-09-14 13:51:14 +0800306#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200307static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100308 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100309 16,
310 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100311 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100312 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100313 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200314 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100315 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200316};
317
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200318static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100319 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100320 16,
321 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100322 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100323 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100324 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200325 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100326 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200327};
Yanray Wang7732ced2023-09-14 13:51:14 +0800328#endif
Paul Bakker5e0efa72013-09-08 23:04:04 +0200329
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200330#if defined(MBEDTLS_CIPHER_MODE_CBC)
331static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100332 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100333 16,
334 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100335 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100336 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100337 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200338 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100339 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000340};
341
Yanray Wang7732ced2023-09-14 13:51:14 +0800342#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200343static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100344 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100345 16,
346 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100347 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100348 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100349 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200350 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100351 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000352};
353
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200354static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100355 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100356 16,
357 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100358 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100359 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100360 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200361 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100362 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000363};
Yanray Wang7732ced2023-09-14 13:51:14 +0800364#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200365#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000366
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200367#if defined(MBEDTLS_CIPHER_MODE_CFB)
368static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100369 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100370 16,
371 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100372 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100373 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100374 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200375 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100376 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000377};
378
Yanray Wang7732ced2023-09-14 13:51:14 +0800379#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200380static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100381 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100382 16,
383 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100384 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100385 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100386 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200387 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100388 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000389};
390
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200391static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100392 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100393 16,
394 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100395 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100396 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100397 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200398 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100399 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000400};
Yanray Wang7732ced2023-09-14 13:51:14 +0800401#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200402#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000403
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100404#if defined(MBEDTLS_CIPHER_MODE_OFB)
405static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100406 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100407 16,
408 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100409 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100410 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100411 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100412 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100413 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100414};
415
Yanray Wang7732ced2023-09-14 13:51:14 +0800416#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100417static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100418 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100419 16,
420 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100421 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100422 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100423 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100424 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100425 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100426};
427
428static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100429 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100430 16,
431 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100432 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100433 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100434 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100435 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100436 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100437};
Yanray Wang7732ced2023-09-14 13:51:14 +0800438#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100439#endif /* MBEDTLS_CIPHER_MODE_OFB */
440
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200441#if defined(MBEDTLS_CIPHER_MODE_CTR)
442static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100443 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100444 16,
445 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100446 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100447 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100448 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200449 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100450 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000451};
452
Yanray Wang7732ced2023-09-14 13:51:14 +0800453#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200454static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100455 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100456 16,
457 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100458 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100459 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100460 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200461 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100462 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000463};
464
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200465static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100466 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100467 16,
468 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100469 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100470 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100471 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200472 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100473 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000474};
Yanray Wang7732ced2023-09-14 13:51:14 +0800475#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200476#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000477
Jaeden Ameroc6539902018-04-30 17:17:41 +0100478#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100479static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
480 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100481{
482 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100483 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100484}
485
Gilles Peskine449bd832023-01-11 14:50:10 +0100486static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
487 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100488{
489 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100490 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100491}
492
Gilles Peskine449bd832023-01-11 14:50:10 +0100493static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100494{
Gilles Peskine449bd832023-01-11 14:50:10 +0100495 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100496
Gilles Peskine449bd832023-01-11 14:50:10 +0100497 if (xts_ctx != NULL) {
498 mbedtls_aes_xts_init(xts_ctx);
499 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100500
Gilles Peskine449bd832023-01-11 14:50:10 +0100501 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100502}
503
Gilles Peskine449bd832023-01-11 14:50:10 +0100504static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100505{
506 mbedtls_aes_xts_context *xts_ctx = ctx;
507
Gilles Peskine449bd832023-01-11 14:50:10 +0100508 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100509 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100510 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100511
Gilles Peskine449bd832023-01-11 14:50:10 +0100512 mbedtls_aes_xts_free(xts_ctx);
513 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100514}
515
516static const mbedtls_cipher_base_t xts_aes_info = {
517 MBEDTLS_CIPHER_ID_AES,
518 NULL,
519#if defined(MBEDTLS_CIPHER_MODE_CBC)
520 NULL,
521#endif
522#if defined(MBEDTLS_CIPHER_MODE_CFB)
523 NULL,
524#endif
525#if defined(MBEDTLS_CIPHER_MODE_OFB)
526 NULL,
527#endif
528#if defined(MBEDTLS_CIPHER_MODE_CTR)
529 NULL,
530#endif
531#if defined(MBEDTLS_CIPHER_MODE_XTS)
532 aes_crypt_xts_wrap,
533#endif
534#if defined(MBEDTLS_CIPHER_MODE_STREAM)
535 NULL,
536#endif
537 xts_aes_setkey_enc_wrap,
538 xts_aes_setkey_dec_wrap,
539 xts_aes_ctx_alloc,
540 xts_aes_ctx_free
541};
542
543static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100544 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100545 16,
546 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100547 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100548 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100549 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100550 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100551 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100552};
553
Yanray Wang7732ced2023-09-14 13:51:14 +0800554#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100555static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100556 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100557 16,
558 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100559 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100560 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100561 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100562 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100563 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100564};
Yanray Wang7732ced2023-09-14 13:51:14 +0800565#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100566#endif /* MBEDTLS_CIPHER_MODE_XTS */
Valerio Settia6c07612023-10-12 18:48:24 +0200567#endif /* MBEDTLS_AES_C */
Jaeden Ameroc6539902018-04-30 17:17:41 +0100568
Valerio Settic1c68582024-01-02 11:46:17 +0100569#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)
Gilles Peskine449bd832023-01-11 14:50:10 +0100570static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
571 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200572{
Gilles Peskine449bd832023-01-11 14:50:10 +0100573 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
574 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200575}
Valerio Settic1c68582024-01-02 11:46:17 +0100576#endif /* MBEDTLS_GCM_C && MBEDTLS_CCM_GCM_CAN_AES */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200577
Valerio Settia6c07612023-10-12 18:48:24 +0200578#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200579static const mbedtls_cipher_base_t gcm_aes_info = {
580 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200581 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200582#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200583 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100584#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200585#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200586 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100587#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100588#if defined(MBEDTLS_CIPHER_MODE_OFB)
589 NULL,
590#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200591#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200592 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100593#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100594#if defined(MBEDTLS_CIPHER_MODE_XTS)
595 NULL,
596#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200597#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200598 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100599#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200600#if defined(MBEDTLS_GCM_C)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200601 gcm_aes_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800602#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200603 gcm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800604#endif
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200605 gcm_ctx_alloc,
606 gcm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200607#else
608 NULL,
609 NULL,
610 NULL,
611 NULL,
612#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200613};
Valerio Settia6c07612023-10-12 18:48:24 +0200614#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200615
Valerio Settia6c07612023-10-12 18:48:24 +0200616#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200617static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100618 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100619 16,
620 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100621 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100622 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100623 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200624 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100625 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100626};
627
Yanray Wang7732ced2023-09-14 13:51:14 +0800628#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200629static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100630 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100631 16,
632 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100633 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100634 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100635 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200636 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100637 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200638};
639
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200640static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100641 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100642 16,
643 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100644 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100645 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100646 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200647 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100648 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100649};
Yanray Wang7732ced2023-09-14 13:51:14 +0800650#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200651#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Paul Bakker68884e32013-01-07 18:20:04 +0100652
Valerio Settic1c68582024-01-02 11:46:17 +0100653#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)
Gilles Peskine449bd832023-01-11 14:50:10 +0100654static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
655 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200656{
Gilles Peskine449bd832023-01-11 14:50:10 +0100657 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
658 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200659}
Valerio Settic1c68582024-01-02 11:46:17 +0100660#endif /* MBEDTLS_CCM_C && MBEDTLS_CCM_GCM_CAN_AES */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200661
Valerio Settia6c07612023-10-12 18:48:24 +0200662#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200663static const mbedtls_cipher_base_t ccm_aes_info = {
664 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200665 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200666#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200667 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100668#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200669#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200670 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100671#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100672#if defined(MBEDTLS_CIPHER_MODE_OFB)
673 NULL,
674#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200675#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200676 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100677#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100678#if defined(MBEDTLS_CIPHER_MODE_XTS)
679 NULL,
680#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200681#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200682 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100683#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200684#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200685 ccm_aes_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800686#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200687 ccm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800688#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200689 ccm_ctx_alloc,
690 ccm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200691#else
692 NULL,
693 NULL,
694 NULL,
695 NULL,
696#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200697};
Valerio Settia6c07612023-10-12 18:48:24 +0200698#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200699
Valerio Settia6c07612023-10-12 18:48:24 +0200700#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200701static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100702 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100703 16,
704 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100705 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100706 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100707 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200708 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100709 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200710};
711
Yanray Wang7732ced2023-09-14 13:51:14 +0800712#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200713static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100714 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100715 16,
716 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100717 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100718 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100719 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200720 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100721 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200722};
723
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200724static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100725 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100726 16,
727 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100728 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100729 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100730 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200731 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100732 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200733};
Yanray Wang7732ced2023-09-14 13:51:14 +0800734#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200735#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200736
Valerio Settia6c07612023-10-12 18:48:24 +0200737#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200738static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100739 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100740 16,
741 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100742 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100743 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100744 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200745 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100746 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200747};
748
Yanray Wang7732ced2023-09-14 13:51:14 +0800749#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200750static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100751 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100752 16,
753 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100754 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100755 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100756 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200757 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100758 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200759};
760
761static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100762 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100763 16,
764 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100765 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100766 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100767 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200768 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100769 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200770};
Yanray Wang7732ced2023-09-14 13:51:14 +0800771#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200772#endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200773
Paul Bakker8123e9d2011-01-06 15:37:30 +0000774
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200775#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000776
Gilles Peskine449bd832023-01-11 14:50:10 +0100777static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
778 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200779{
Gilles Peskine449bd832023-01-11 14:50:10 +0100780 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
781 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200782}
783
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200784#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100785static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
786 size_t length, unsigned char *iv,
787 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000788{
Gilles Peskine449bd832023-01-11 14:50:10 +0100789 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
790 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000791}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200792#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000793
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200794#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100795static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
796 size_t length, size_t *iv_off, unsigned char *iv,
797 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000798{
Gilles Peskine449bd832023-01-11 14:50:10 +0100799 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
800 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000801}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200802#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000803
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200804#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100805static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
806 unsigned char *nonce_counter, unsigned char *stream_block,
807 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000808{
Gilles Peskine449bd832023-01-11 14:50:10 +0100809 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
810 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000811}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200812#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000813
Yanray Wangb67b4742023-10-31 17:10:32 +0800814#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +0100815static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
816 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000817{
Gilles Peskine449bd832023-01-11 14:50:10 +0100818 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000819}
Yanray Wangdb9b3092023-08-24 15:47:53 +0800820#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +0000821
Gilles Peskine449bd832023-01-11 14:50:10 +0100822static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
823 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000824{
Gilles Peskine449bd832023-01-11 14:50:10 +0100825 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000826}
827
Gilles Peskine449bd832023-01-11 14:50:10 +0100828static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000829{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200830 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100831 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200832
Gilles Peskine449bd832023-01-11 14:50:10 +0100833 if (ctx == NULL) {
834 return NULL;
835 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200836
Gilles Peskine449bd832023-01-11 14:50:10 +0100837 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200838
Gilles Peskine449bd832023-01-11 14:50:10 +0100839 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000840}
841
Gilles Peskine449bd832023-01-11 14:50:10 +0100842static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000843{
Gilles Peskine449bd832023-01-11 14:50:10 +0100844 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
845 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000846}
847
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200848static const mbedtls_cipher_base_t camellia_info = {
849 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200850 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200851#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000852 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100853#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200854#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000855 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100856#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100857#if defined(MBEDTLS_CIPHER_MODE_OFB)
858 NULL,
859#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200860#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000861 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100862#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100863#if defined(MBEDTLS_CIPHER_MODE_XTS)
864 NULL,
865#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200866#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200867 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100868#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000869 camellia_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800870#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker343a8702011-06-09 14:27:58 +0000871 camellia_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800872#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000873 camellia_ctx_alloc,
874 camellia_ctx_free
875};
876
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200877static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100878 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100879 16,
880 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100881 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100882 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100883 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200884 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100885 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200886};
887
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200888static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100889 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100890 16,
891 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100892 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100893 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100894 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200895 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100896 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200897};
898
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200899static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100900 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100901 16,
902 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100903 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100904 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100905 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200906 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100907 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200908};
909
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200910#if defined(MBEDTLS_CIPHER_MODE_CBC)
911static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100912 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100913 16,
914 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100915 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100916 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100917 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200918 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100919 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000920};
921
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200922static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100923 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100924 16,
925 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100926 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100927 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100928 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200929 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100930 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000931};
932
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200933static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100934 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100935 16,
936 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100937 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100938 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100939 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200940 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100941 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000942};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200943#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000944
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200945#if defined(MBEDTLS_CIPHER_MODE_CFB)
946static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100947 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100948 16,
949 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100950 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100951 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100952 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200953 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100954 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000955};
956
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200957static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100958 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100959 16,
960 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100961 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100962 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100963 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200964 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100965 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000966};
967
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200968static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100969 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100970 16,
971 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100972 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100973 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100974 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200975 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100976 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000977};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200978#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000979
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200980#if defined(MBEDTLS_CIPHER_MODE_CTR)
981static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100982 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100983 16,
984 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100985 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100986 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100987 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200988 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100989 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000990};
991
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200992static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100993 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100994 16,
995 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100996 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100997 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100998 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200999 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001000 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +00001001};
1002
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001003static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001004 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001005 16,
1006 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001007 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001008 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001009 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001010 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001011 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +00001012};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001013#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +00001014
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001015#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001016static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1017 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001018{
Gilles Peskine449bd832023-01-11 14:50:10 +01001019 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1020 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001021}
1022
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001023static const mbedtls_cipher_base_t gcm_camellia_info = {
1024 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001025 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001026#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001027 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001028#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001029#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001030 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001031#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001032#if defined(MBEDTLS_CIPHER_MODE_OFB)
1033 NULL,
1034#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001035#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001036 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001037#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001038#if defined(MBEDTLS_CIPHER_MODE_XTS)
1039 NULL,
1040#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001041#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001042 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001043#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001044 gcm_camellia_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001045#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001046 gcm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001047#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001048 gcm_ctx_alloc,
1049 gcm_ctx_free,
1050};
1051
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001052static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001053 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001054 16,
1055 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001056 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001057 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001058 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001059 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001060 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001061};
1062
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001063static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001064 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001065 16,
1066 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001067 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001068 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001069 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001070 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001071 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001072};
1073
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001074static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001075 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001076 16,
1077 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001078 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001079 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001080 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001081 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001082 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001083};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001084#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001085
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001086#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001087static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1088 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001089{
Gilles Peskine449bd832023-01-11 14:50:10 +01001090 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1091 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001092}
1093
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001094static const mbedtls_cipher_base_t ccm_camellia_info = {
1095 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001096 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001097#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001098 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001099#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001100#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001101 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001102#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001103#if defined(MBEDTLS_CIPHER_MODE_OFB)
1104 NULL,
1105#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001106#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001107 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001108#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001109#if defined(MBEDTLS_CIPHER_MODE_XTS)
1110 NULL,
1111#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001112#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001113 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001114#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001115 ccm_camellia_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001116#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001117 ccm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001118#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001119 ccm_ctx_alloc,
1120 ccm_ctx_free,
1121};
1122
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001123static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001124 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001125 16,
1126 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001127 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001128 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001129 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001130 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001131 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001132};
1133
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001134static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001135 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001136 16,
1137 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001138 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001139 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001140 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001141 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001142 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001143};
1144
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001145static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001146 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001147 16,
1148 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001149 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001150 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001151 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001152 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001153 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001154};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001155
1156static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001157 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001158 16,
1159 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001160 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001161 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001162 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001163 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001164 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001165};
1166
1167static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001168 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001169 16,
1170 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001171 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001172 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001173 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001174 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001175 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001176};
1177
1178static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001179 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001180 16,
1181 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001182 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001183 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001184 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001185 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001186 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001187};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001188#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001189
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001190#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001191
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001192#if defined(MBEDTLS_ARIA_C)
1193
Gilles Peskine449bd832023-01-11 14:50:10 +01001194static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1195 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001196{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001197 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001198 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1199 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001200}
1201
1202#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001203static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1204 size_t length, unsigned char *iv,
1205 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001206{
Gilles Peskine449bd832023-01-11 14:50:10 +01001207 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1208 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001209}
1210#endif /* MBEDTLS_CIPHER_MODE_CBC */
1211
1212#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001213static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1214 size_t length, size_t *iv_off, unsigned char *iv,
1215 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001216{
Gilles Peskine449bd832023-01-11 14:50:10 +01001217 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1218 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001219}
1220#endif /* MBEDTLS_CIPHER_MODE_CFB */
1221
1222#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001223static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1224 unsigned char *nonce_counter, unsigned char *stream_block,
1225 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001226{
Gilles Peskine449bd832023-01-11 14:50:10 +01001227 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1228 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001229}
1230#endif /* MBEDTLS_CIPHER_MODE_CTR */
1231
Yanray Wangb67b4742023-10-31 17:10:32 +08001232#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +01001233static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1234 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001235{
Gilles Peskine449bd832023-01-11 14:50:10 +01001236 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001237}
Yanray Wangdb9b3092023-08-24 15:47:53 +08001238#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001239
Gilles Peskine449bd832023-01-11 14:50:10 +01001240static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1241 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001242{
Gilles Peskine449bd832023-01-11 14:50:10 +01001243 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001244}
1245
Gilles Peskine449bd832023-01-11 14:50:10 +01001246static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001247{
1248 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001249 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001250
Gilles Peskine449bd832023-01-11 14:50:10 +01001251 if (ctx == NULL) {
1252 return NULL;
1253 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001254
Gilles Peskine449bd832023-01-11 14:50:10 +01001255 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001256
Gilles Peskine449bd832023-01-11 14:50:10 +01001257 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001258}
1259
Gilles Peskine449bd832023-01-11 14:50:10 +01001260static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001261{
Gilles Peskine449bd832023-01-11 14:50:10 +01001262 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1263 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001264}
1265
1266static const mbedtls_cipher_base_t aria_info = {
1267 MBEDTLS_CIPHER_ID_ARIA,
1268 aria_crypt_ecb_wrap,
1269#if defined(MBEDTLS_CIPHER_MODE_CBC)
1270 aria_crypt_cbc_wrap,
1271#endif
1272#if defined(MBEDTLS_CIPHER_MODE_CFB)
1273 aria_crypt_cfb128_wrap,
1274#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001275#if defined(MBEDTLS_CIPHER_MODE_OFB)
1276 NULL,
1277#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001278#if defined(MBEDTLS_CIPHER_MODE_CTR)
1279 aria_crypt_ctr_wrap,
1280#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001281#if defined(MBEDTLS_CIPHER_MODE_XTS)
1282 NULL,
1283#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001284#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1285 NULL,
1286#endif
1287 aria_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001288#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001289 aria_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001290#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001291 aria_ctx_alloc,
1292 aria_ctx_free
1293};
1294
1295static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001296 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001297 16,
1298 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001299 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001300 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001301 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001302 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001303 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001304};
1305
1306static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001307 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001308 16,
1309 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001310 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001311 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001312 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001313 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001314 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001315};
1316
1317static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001318 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001319 16,
1320 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001321 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001322 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001323 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001324 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001325 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001326};
1327
1328#if defined(MBEDTLS_CIPHER_MODE_CBC)
1329static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001330 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001331 16,
1332 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001333 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001334 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001335 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001336 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001337 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001338};
1339
1340static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001341 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001342 16,
1343 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001344 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001345 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001346 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001347 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001348 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001349};
1350
1351static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001352 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001353 16,
1354 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001355 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001356 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001357 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001358 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001359 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001360};
1361#endif /* MBEDTLS_CIPHER_MODE_CBC */
1362
1363#if defined(MBEDTLS_CIPHER_MODE_CFB)
1364static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001365 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001366 16,
1367 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001368 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001369 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001370 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001371 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001372 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001373};
1374
1375static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001376 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001377 16,
1378 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001379 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001380 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001381 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001382 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001383 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001384};
1385
1386static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001387 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001388 16,
1389 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001390 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001391 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001392 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001393 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001394 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001395};
1396#endif /* MBEDTLS_CIPHER_MODE_CFB */
1397
1398#if defined(MBEDTLS_CIPHER_MODE_CTR)
1399static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001400 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001401 16,
1402 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001403 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001404 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001405 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001406 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001407 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001408};
1409
1410static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001411 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001412 16,
1413 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001414 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001415 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001416 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001417 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001418 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001419};
1420
1421static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001422 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001423 16,
1424 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001425 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001426 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001427 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001428 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001429 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001430};
1431#endif /* MBEDTLS_CIPHER_MODE_CTR */
1432
1433#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001434static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1435 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001436{
Gilles Peskine449bd832023-01-11 14:50:10 +01001437 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1438 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001439}
1440
1441static const mbedtls_cipher_base_t gcm_aria_info = {
1442 MBEDTLS_CIPHER_ID_ARIA,
1443 NULL,
1444#if defined(MBEDTLS_CIPHER_MODE_CBC)
1445 NULL,
1446#endif
1447#if defined(MBEDTLS_CIPHER_MODE_CFB)
1448 NULL,
1449#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001450#if defined(MBEDTLS_CIPHER_MODE_OFB)
1451 NULL,
1452#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001453#if defined(MBEDTLS_CIPHER_MODE_CTR)
1454 NULL,
1455#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001456#if defined(MBEDTLS_CIPHER_MODE_XTS)
1457 NULL,
1458#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001459#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1460 NULL,
1461#endif
1462 gcm_aria_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001463#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001464 gcm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001465#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001466 gcm_ctx_alloc,
1467 gcm_ctx_free,
1468};
1469
1470static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001471 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001472 16,
1473 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001474 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001475 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001476 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001477 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001478 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001479};
1480
1481static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001482 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001483 16,
1484 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001485 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001486 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001487 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001488 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001489 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001490};
1491
1492static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001493 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001494 16,
1495 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001496 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001497 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001498 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001499 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001500 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001501};
1502#endif /* MBEDTLS_GCM_C */
1503
1504#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001505static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1506 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001507{
Gilles Peskine449bd832023-01-11 14:50:10 +01001508 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1509 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001510}
1511
1512static const mbedtls_cipher_base_t ccm_aria_info = {
1513 MBEDTLS_CIPHER_ID_ARIA,
1514 NULL,
1515#if defined(MBEDTLS_CIPHER_MODE_CBC)
1516 NULL,
1517#endif
1518#if defined(MBEDTLS_CIPHER_MODE_CFB)
1519 NULL,
1520#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001521#if defined(MBEDTLS_CIPHER_MODE_OFB)
1522 NULL,
1523#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001524#if defined(MBEDTLS_CIPHER_MODE_CTR)
1525 NULL,
1526#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001527#if defined(MBEDTLS_CIPHER_MODE_XTS)
1528 NULL,
1529#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001530#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1531 NULL,
1532#endif
1533 ccm_aria_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001534#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001535 ccm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001536#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001537 ccm_ctx_alloc,
1538 ccm_ctx_free,
1539};
1540
1541static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001542 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001543 16,
1544 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001545 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001546 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001547 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001548 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001549 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001550};
1551
1552static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001553 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001554 16,
1555 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001556 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001557 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001558 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001559 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001560 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001561};
1562
1563static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001564 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001565 16,
1566 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001567 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001568 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001569 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001570 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001571 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001572};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001573
1574static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001575 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001576 16,
1577 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001578 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001579 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001580 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001581 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001582 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001583};
1584
1585static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001586 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001587 16,
1588 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001589 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001590 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001591 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001592 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001593 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001594};
1595
1596static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001597 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001598 16,
1599 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001600 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001601 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001602 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001603 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001604 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001605};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001606#endif /* MBEDTLS_CCM_C */
1607
1608#endif /* MBEDTLS_ARIA_C */
1609
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001610#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001611
Gilles Peskine449bd832023-01-11 14:50:10 +01001612static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1613 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001614{
1615 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001616 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001617}
1618
Gilles Peskine449bd832023-01-11 14:50:10 +01001619static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1620 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001621{
1622 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001623 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001624}
1625
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001626#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001627static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1628 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001629{
Gilles Peskine449bd832023-01-11 14:50:10 +01001630 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1631 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001632}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001633#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001634
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001635#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001636static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1637 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001638{
Gilles Peskine449bd832023-01-11 14:50:10 +01001639 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1640 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001641}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001642#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001643
Gilles Peskine449bd832023-01-11 14:50:10 +01001644static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1645 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001646{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001647 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001648
Gilles Peskine449bd832023-01-11 14:50:10 +01001649 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001650}
1651
Gilles Peskine449bd832023-01-11 14:50:10 +01001652static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1653 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001654{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001655 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001656
Gilles Peskine449bd832023-01-11 14:50:10 +01001657 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001658}
1659
Gilles Peskine449bd832023-01-11 14:50:10 +01001660static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1661 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001662{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001663 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001664
Gilles Peskine449bd832023-01-11 14:50:10 +01001665 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001666}
1667
Gilles Peskine449bd832023-01-11 14:50:10 +01001668static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1669 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001670{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001671 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001672
Gilles Peskine449bd832023-01-11 14:50:10 +01001673 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001674}
1675
Gilles Peskine449bd832023-01-11 14:50:10 +01001676static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1677 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001678{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001679 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001680
Gilles Peskine449bd832023-01-11 14:50:10 +01001681 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001682}
1683
Gilles Peskine449bd832023-01-11 14:50:10 +01001684static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1685 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001686{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001687 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001688
Gilles Peskine449bd832023-01-11 14:50:10 +01001689 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001690}
1691
Gilles Peskine449bd832023-01-11 14:50:10 +01001692static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001693{
Gilles Peskine449bd832023-01-11 14:50:10 +01001694 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001695
Gilles Peskine449bd832023-01-11 14:50:10 +01001696 if (des == NULL) {
1697 return NULL;
1698 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001699
Gilles Peskine449bd832023-01-11 14:50:10 +01001700 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001701
Gilles Peskine449bd832023-01-11 14:50:10 +01001702 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001703}
1704
Gilles Peskine449bd832023-01-11 14:50:10 +01001705static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001706{
Gilles Peskine449bd832023-01-11 14:50:10 +01001707 mbedtls_des_free((mbedtls_des_context *) ctx);
1708 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001709}
1710
Gilles Peskine449bd832023-01-11 14:50:10 +01001711static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001712{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001713 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001714 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001715
Gilles Peskine449bd832023-01-11 14:50:10 +01001716 if (des3 == NULL) {
1717 return NULL;
1718 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001719
Gilles Peskine449bd832023-01-11 14:50:10 +01001720 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001721
Gilles Peskine449bd832023-01-11 14:50:10 +01001722 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001723}
1724
Gilles Peskine449bd832023-01-11 14:50:10 +01001725static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001726{
Gilles Peskine449bd832023-01-11 14:50:10 +01001727 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1728 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001729}
1730
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001731static const mbedtls_cipher_base_t des_info = {
1732 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001733 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001734#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001735 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001736#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001737#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001738 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001739#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001740#if defined(MBEDTLS_CIPHER_MODE_OFB)
1741 NULL,
1742#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001743#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001744 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001745#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001746#if defined(MBEDTLS_CIPHER_MODE_XTS)
1747 NULL,
1748#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001749#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001750 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001751#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001752 des_setkey_enc_wrap,
1753 des_setkey_dec_wrap,
1754 des_ctx_alloc,
1755 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001756};
1757
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001758static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001759 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001760 8,
1761 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001762 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001763 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001764 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001765 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001766 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001767};
1768
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001769#if defined(MBEDTLS_CIPHER_MODE_CBC)
1770static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001771 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001772 8,
1773 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001774 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001775 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001776 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001777 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001778 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001779};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001780#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001781
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001782static const mbedtls_cipher_base_t des_ede_info = {
1783 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001784 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001785#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001786 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001787#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001788#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001789 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001790#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001791#if defined(MBEDTLS_CIPHER_MODE_OFB)
1792 NULL,
1793#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001794#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001795 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001796#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001797#if defined(MBEDTLS_CIPHER_MODE_XTS)
1798 NULL,
1799#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001800#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001801 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001802#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001803 des3_set2key_enc_wrap,
1804 des3_set2key_dec_wrap,
1805 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001806 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001807};
1808
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001809static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001810 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001811 8,
1812 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001813 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001814 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001815 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001816 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001817 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001818};
1819
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001820#if defined(MBEDTLS_CIPHER_MODE_CBC)
1821static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001822 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001823 8,
1824 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001825 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001826 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001827 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001828 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001829 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001830};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001831#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001832
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001833static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001834 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001835 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001836#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001837 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001838#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001839#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001840 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001841#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001842#if defined(MBEDTLS_CIPHER_MODE_OFB)
1843 NULL,
1844#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001845#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001846 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001847#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001848#if defined(MBEDTLS_CIPHER_MODE_XTS)
1849 NULL,
1850#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001851#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001852 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001853#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001854 des3_set3key_enc_wrap,
1855 des3_set3key_dec_wrap,
1856 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001857 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001858};
1859
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001860static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001861 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001862 8,
1863 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001864 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001865 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001866 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001867 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001868 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001869};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001870#if defined(MBEDTLS_CIPHER_MODE_CBC)
1871static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001872 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001873 8,
1874 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001875 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001876 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001877 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001878 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001879 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001880};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001881#endif /* MBEDTLS_CIPHER_MODE_CBC */
1882#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001883
Daniel Kingbd920622016-05-15 19:56:20 -03001884#if defined(MBEDTLS_CHACHA20_C)
1885
Gilles Peskine449bd832023-01-11 14:50:10 +01001886static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1887 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001888{
Gilles Peskine449bd832023-01-11 14:50:10 +01001889 if (key_bitlen != 256U) {
1890 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1891 }
Daniel Kingbd920622016-05-15 19:56:20 -03001892
Gilles Peskine449bd832023-01-11 14:50:10 +01001893 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1894 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1895 }
Daniel Kingbd920622016-05-15 19:56:20 -03001896
Gilles Peskine449bd832023-01-11 14:50:10 +01001897 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001898}
1899
Gilles Peskine449bd832023-01-11 14:50:10 +01001900static int chacha20_stream_wrap(void *ctx, size_t length,
1901 const unsigned char *input,
1902 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001903{
Janos Follath24eed8d2019-11-22 13:21:35 +00001904 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001905
Gilles Peskine449bd832023-01-11 14:50:10 +01001906 ret = mbedtls_chacha20_update(ctx, length, input, output);
1907 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1908 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1909 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001910
Gilles Peskine449bd832023-01-11 14:50:10 +01001911 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001912}
1913
Gilles Peskine449bd832023-01-11 14:50:10 +01001914static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001915{
1916 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001917 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001918
Gilles Peskine449bd832023-01-11 14:50:10 +01001919 if (ctx == NULL) {
1920 return NULL;
1921 }
Daniel Kingbd920622016-05-15 19:56:20 -03001922
Gilles Peskine449bd832023-01-11 14:50:10 +01001923 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001924
Gilles Peskine449bd832023-01-11 14:50:10 +01001925 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001926}
1927
Gilles Peskine449bd832023-01-11 14:50:10 +01001928static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001929{
Gilles Peskine449bd832023-01-11 14:50:10 +01001930 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1931 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001932}
1933
1934static const mbedtls_cipher_base_t chacha20_base_info = {
1935 MBEDTLS_CIPHER_ID_CHACHA20,
1936 NULL,
1937#if defined(MBEDTLS_CIPHER_MODE_CBC)
1938 NULL,
1939#endif
1940#if defined(MBEDTLS_CIPHER_MODE_CFB)
1941 NULL,
1942#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001943#if defined(MBEDTLS_CIPHER_MODE_OFB)
1944 NULL,
1945#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001946#if defined(MBEDTLS_CIPHER_MODE_CTR)
1947 NULL,
1948#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001949#if defined(MBEDTLS_CIPHER_MODE_XTS)
1950 NULL,
1951#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001952#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001953 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001954#endif
1955 chacha20_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001956#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Daniel Kingbd920622016-05-15 19:56:20 -03001957 chacha20_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001958#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001959 chacha20_ctx_alloc,
1960 chacha20_ctx_free
1961};
1962static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001963 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001964 1,
1965 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001966 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001967 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001968 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001969 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001970 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001971};
1972#endif /* MBEDTLS_CHACHA20_C */
1973
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001974#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001975
Gilles Peskine449bd832023-01-11 14:50:10 +01001976static int chachapoly_setkey_wrap(void *ctx,
1977 const unsigned char *key,
1978 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001979{
Gilles Peskine449bd832023-01-11 14:50:10 +01001980 if (key_bitlen != 256U) {
1981 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1982 }
Daniel King8fe47012016-05-17 20:33:28 -03001983
Gilles Peskine449bd832023-01-11 14:50:10 +01001984 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1985 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1986 }
Daniel King8fe47012016-05-17 20:33:28 -03001987
Gilles Peskine449bd832023-01-11 14:50:10 +01001988 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001989}
1990
Gilles Peskine449bd832023-01-11 14:50:10 +01001991static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001992{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001993 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001994 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001995
Gilles Peskine449bd832023-01-11 14:50:10 +01001996 if (ctx == NULL) {
1997 return NULL;
1998 }
Daniel King8fe47012016-05-17 20:33:28 -03001999
Gilles Peskine449bd832023-01-11 14:50:10 +01002000 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03002001
Gilles Peskine449bd832023-01-11 14:50:10 +01002002 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03002003}
2004
Gilles Peskine449bd832023-01-11 14:50:10 +01002005static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03002006{
Gilles Peskine449bd832023-01-11 14:50:10 +01002007 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
2008 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03002009}
2010
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002011static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03002012 MBEDTLS_CIPHER_ID_CHACHA20,
2013 NULL,
2014#if defined(MBEDTLS_CIPHER_MODE_CBC)
2015 NULL,
2016#endif
2017#if defined(MBEDTLS_CIPHER_MODE_CFB)
2018 NULL,
2019#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002020#if defined(MBEDTLS_CIPHER_MODE_OFB)
2021 NULL,
2022#endif
Daniel King8fe47012016-05-17 20:33:28 -03002023#if defined(MBEDTLS_CIPHER_MODE_CTR)
2024 NULL,
2025#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002026#if defined(MBEDTLS_CIPHER_MODE_XTS)
2027 NULL,
2028#endif
Daniel King8fe47012016-05-17 20:33:28 -03002029#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2030 NULL,
2031#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002032 chachapoly_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08002033#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002034 chachapoly_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002035#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002036 chachapoly_ctx_alloc,
2037 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002038};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002039static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002040 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002041 1,
2042 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002043 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002044 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002045 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002046 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002047 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002048};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002049#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002050
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002051#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002052static int null_crypt_stream(void *ctx, size_t length,
2053 const unsigned char *input,
2054 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002055{
2056 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002057 memmove(output, input, length);
2058 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002059}
2060
Gilles Peskine449bd832023-01-11 14:50:10 +01002061static int null_setkey(void *ctx, const unsigned char *key,
2062 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002063{
2064 ((void) ctx);
2065 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002066 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002067
Gilles Peskine449bd832023-01-11 14:50:10 +01002068 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002069}
2070
Gilles Peskine449bd832023-01-11 14:50:10 +01002071static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002072{
Gilles Peskine449bd832023-01-11 14:50:10 +01002073 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002074}
2075
Gilles Peskine449bd832023-01-11 14:50:10 +01002076static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002077{
2078 ((void) ctx);
2079}
2080
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002081static const mbedtls_cipher_base_t null_base_info = {
2082 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002083 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002084#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002085 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002086#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002087#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002088 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002089#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002090#if defined(MBEDTLS_CIPHER_MODE_OFB)
2091 NULL,
2092#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002093#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002094 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002095#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002096#if defined(MBEDTLS_CIPHER_MODE_XTS)
2097 NULL,
2098#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002099#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002100 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002101#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002102 null_setkey,
Yanray Wangb67b4742023-10-31 17:10:32 +08002103#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002104 null_setkey,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002105#endif
Paul Bakkerfab5c822012-02-06 16:45:10 +00002106 null_ctx_alloc,
2107 null_ctx_free
2108};
2109
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002110static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002111 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002112 1,
2113 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002114 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002115 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002116 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002117 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002118 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002119};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002120#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002121
Jack Lloydffdf2882019-03-07 17:00:32 -05002122#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002123static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002124{
Gilles Peskine449bd832023-01-11 14:50:10 +01002125 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002126
Gilles Peskine449bd832023-01-11 14:50:10 +01002127 if (ctx != NULL) {
2128 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2129 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002130
Gilles Peskine449bd832023-01-11 14:50:10 +01002131 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002132}
2133
Gilles Peskine449bd832023-01-11 14:50:10 +01002134static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002135{
Gilles Peskine449bd832023-01-11 14:50:10 +01002136 mbedtls_nist_kw_free(ctx);
2137 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002138}
2139
Gilles Peskine449bd832023-01-11 14:50:10 +01002140static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2141 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002142{
Gilles Peskine449bd832023-01-11 14:50:10 +01002143 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2144 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002145}
2146
Gilles Peskine449bd832023-01-11 14:50:10 +01002147static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2148 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002149{
Gilles Peskine449bd832023-01-11 14:50:10 +01002150 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2151 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002152}
2153
2154static const mbedtls_cipher_base_t kw_aes_info = {
2155 MBEDTLS_CIPHER_ID_AES,
2156 NULL,
2157#if defined(MBEDTLS_CIPHER_MODE_CBC)
2158 NULL,
2159#endif
2160#if defined(MBEDTLS_CIPHER_MODE_CFB)
2161 NULL,
2162#endif
2163#if defined(MBEDTLS_CIPHER_MODE_OFB)
2164 NULL,
2165#endif
2166#if defined(MBEDTLS_CIPHER_MODE_CTR)
2167 NULL,
2168#endif
2169#if defined(MBEDTLS_CIPHER_MODE_XTS)
2170 NULL,
2171#endif
2172#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2173 NULL,
2174#endif
2175 kw_aes_setkey_wrap,
2176 kw_aes_setkey_unwrap,
2177 kw_ctx_alloc,
2178 kw_ctx_free,
2179};
2180
2181static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002182 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002183 16,
2184 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002185 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002186 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002187 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002188 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002189 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002190};
2191
Yanray Wang7732ced2023-09-14 13:51:14 +08002192#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002193static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002194 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002195 16,
2196 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002197 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002198 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002199 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002200 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002201 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002202};
2203
2204static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002205 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002206 16,
2207 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002208 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002209 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002210 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002211 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002212 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002213};
Yanray Wang7732ced2023-09-14 13:51:14 +08002214#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002215
2216static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002217 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002218 16,
2219 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002220 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002221 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002222 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002223 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002224 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002225};
2226
Yanray Wang7732ced2023-09-14 13:51:14 +08002227#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002228static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002229 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002230 16,
2231 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002232 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002233 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002234 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002235 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002236 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002237};
2238
2239static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002240 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002241 16,
2242 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002243 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002244 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002245 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002246 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002247 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002248};
Yanray Wang7732ced2023-09-14 13:51:14 +08002249#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002250#endif /* MBEDTLS_NIST_KW_C */
2251
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002252const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002253{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002254#if defined(MBEDTLS_AES_C)
2255 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002256#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002257 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2258 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002259#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002260#if defined(MBEDTLS_CIPHER_MODE_CBC)
2261 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002262#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002263 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2264 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002265#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002266#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002267#if defined(MBEDTLS_CIPHER_MODE_CFB)
2268 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002269#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002270 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2271 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002272#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002273#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002274#if defined(MBEDTLS_CIPHER_MODE_OFB)
2275 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002276#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002277 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2278 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2279#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002280#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002281#if defined(MBEDTLS_CIPHER_MODE_CTR)
2282 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002283#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002284 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2285 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002286#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002287#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002288#if defined(MBEDTLS_CIPHER_MODE_XTS)
2289 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002290#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002291 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2292#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002293#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002294#endif /* MBEDTLS_AES_C */
2295#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002296 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002297#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002298 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2299 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002300#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002301#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002302#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002303 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002304#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002305 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2306 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002307#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002308#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002309#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002310 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002311#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002312 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2313 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002314#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002315#endif
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002316
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002317#if defined(MBEDTLS_CAMELLIA_C)
2318 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2319 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2320 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2321#if defined(MBEDTLS_CIPHER_MODE_CBC)
2322 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2323 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2324 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002325#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002326#if defined(MBEDTLS_CIPHER_MODE_CFB)
2327 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2328 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2329 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002330#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002331#if defined(MBEDTLS_CIPHER_MODE_CTR)
2332 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2333 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2334 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002335#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002336#if defined(MBEDTLS_GCM_C)
2337 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2338 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2339 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002340#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002341#if defined(MBEDTLS_CCM_C)
2342 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2343 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2344 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002345 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2346 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2347 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002348#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002349#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002350
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002351#if defined(MBEDTLS_ARIA_C)
2352 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2353 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2354 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2355#if defined(MBEDTLS_CIPHER_MODE_CBC)
2356 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2357 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2358 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2359#endif
2360#if defined(MBEDTLS_CIPHER_MODE_CFB)
2361 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2362 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2363 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2364#endif
2365#if defined(MBEDTLS_CIPHER_MODE_CTR)
2366 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2367 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2368 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2369#endif
2370#if defined(MBEDTLS_GCM_C)
2371 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2372 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2373 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2374#endif
2375#if defined(MBEDTLS_CCM_C)
2376 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2377 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2378 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002379 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2380 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2381 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002382#endif
2383#endif /* MBEDTLS_ARIA_C */
2384
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002385#if defined(MBEDTLS_DES_C)
2386 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2387 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2388 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2389#if defined(MBEDTLS_CIPHER_MODE_CBC)
2390 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2391 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2392 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002393#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002394#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002395
Daniel Kingbd920622016-05-15 19:56:20 -03002396#if defined(MBEDTLS_CHACHA20_C)
2397 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2398#endif
2399
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002400#if defined(MBEDTLS_CHACHAPOLY_C)
2401 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002402#endif
2403
Jack Lloydffdf2882019-03-07 17:00:32 -05002404#if defined(MBEDTLS_NIST_KW_C)
2405 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002406#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002407 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2408 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002409#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002410 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002411#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002412 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2413 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2414#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002415#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002416
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002417#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2418 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2419#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002420
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002421 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002422};
2423
Gilles Peskine449bd832023-01-11 14:50:10 +01002424#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2425 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002426int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002427
Xavier Chapronafedef52025-04-18 09:24:05 +02002428const mbedtls_cipher_base_t * const mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002429#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002430 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002431#endif
2432#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002433 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002434#endif
2435#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002436 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002437#endif
Valerio Settidcee9872023-10-16 11:35:57 +02002438#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002439 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002440#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002441#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002442 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002443#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002444#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002445 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002446#endif
2447#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002448 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002449#endif
2450#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002451 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002452#endif
2453#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002454 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002455#endif
2456#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002457 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002458#endif
2459#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002460 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002461#endif
Valerio Settidcee9872023-10-16 11:35:57 +02002462#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002463 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002464#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002465#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002466 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002467#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002468#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002469 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002470#endif
2471#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002472 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002473#endif
2474#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002475 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002476#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002477#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002478 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002479#endif
2480};
2481
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002482#endif /* MBEDTLS_CIPHER_C */