blob: c173899cbc2adad30a6ae18100368489796f87df [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
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200117#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200118/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100119static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200120{
Gilles Peskine449bd832023-01-11 14:50:10 +0100121 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200122
Gilles Peskine449bd832023-01-11 14:50:10 +0100123 if (ctx != NULL) {
124 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
125 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200126
Gilles Peskine449bd832023-01-11 14:50:10 +0100127 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200128}
129
Gilles Peskine449bd832023-01-11 14:50:10 +0100130static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200131{
Gilles Peskine449bd832023-01-11 14:50:10 +0100132 mbedtls_gcm_free(ctx);
133 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200134}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200135#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200136
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200137#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200138/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100139static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200140{
Gilles Peskine449bd832023-01-11 14:50:10 +0100141 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200142
Gilles Peskine449bd832023-01-11 14:50:10 +0100143 if (ctx != NULL) {
144 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
145 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200146
Gilles Peskine449bd832023-01-11 14:50:10 +0100147 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200148}
149
Gilles Peskine449bd832023-01-11 14:50:10 +0100150static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200151{
Gilles Peskine449bd832023-01-11 14:50:10 +0100152 mbedtls_ccm_free(ctx);
153 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200154}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200155#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200156
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200157#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000158
Gilles Peskine449bd832023-01-11 14:50:10 +0100159static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
160 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200161{
Gilles Peskine449bd832023-01-11 14:50:10 +0100162 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200163}
164
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200165#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100166static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
167 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000168{
Gilles Peskine449bd832023-01-11 14:50:10 +0100169 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
170 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000171}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200172#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000173
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200174#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100175static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
176 size_t length, size_t *iv_off, unsigned char *iv,
177 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000178{
Gilles Peskine449bd832023-01-11 14:50:10 +0100179 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
180 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000181}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200182#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000183
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100184#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100185static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
186 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100187{
Gilles Peskine449bd832023-01-11 14:50:10 +0100188 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
189 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100190}
191#endif /* MBEDTLS_CIPHER_MODE_OFB */
192
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200193#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100194static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
195 unsigned char *nonce_counter, unsigned char *stream_block,
196 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000197{
Gilles Peskine449bd832023-01-11 14:50:10 +0100198 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
199 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000200}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200201#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000202
Jaeden Ameroc6539902018-04-30 17:17:41 +0100203#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100204static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
205 size_t length,
206 const unsigned char data_unit[16],
207 const unsigned char *input,
208 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100209{
210 mbedtls_aes_xts_context *xts_ctx = ctx;
211 int mode;
212
Gilles Peskine449bd832023-01-11 14:50:10 +0100213 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100214 case MBEDTLS_ENCRYPT:
215 mode = MBEDTLS_AES_ENCRYPT;
216 break;
217 case MBEDTLS_DECRYPT:
218 mode = MBEDTLS_AES_DECRYPT;
219 break;
220 default:
221 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
222 }
223
Gilles Peskine449bd832023-01-11 14:50:10 +0100224 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
225 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100226}
227#endif /* MBEDTLS_CIPHER_MODE_XTS */
228
Yanray Wangb67b4742023-10-31 17:10:32 +0800229#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +0100230static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
231 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000232{
Gilles Peskine449bd832023-01-11 14:50:10 +0100233 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000234}
Yanray Wangdb9b3092023-08-24 15:47:53 +0800235#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +0000236
Gilles Peskine449bd832023-01-11 14:50:10 +0100237static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
238 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000239{
Gilles Peskine449bd832023-01-11 14:50:10 +0100240 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000241}
242
Gilles Peskine449bd832023-01-11 14:50:10 +0100243static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000244{
Gilles Peskine449bd832023-01-11 14:50:10 +0100245 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200246
Gilles Peskine449bd832023-01-11 14:50:10 +0100247 if (aes == NULL) {
248 return NULL;
249 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200250
Gilles Peskine449bd832023-01-11 14:50:10 +0100251 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200252
Gilles Peskine449bd832023-01-11 14:50:10 +0100253 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000254}
255
Gilles Peskine449bd832023-01-11 14:50:10 +0100256static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000257{
Gilles Peskine449bd832023-01-11 14:50:10 +0100258 mbedtls_aes_free((mbedtls_aes_context *) ctx);
259 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000260}
261
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200262static const mbedtls_cipher_base_t aes_info = {
263 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200264 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200265#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000266 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100267#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200268#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000269 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100270#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100271#if defined(MBEDTLS_CIPHER_MODE_OFB)
272 aes_crypt_ofb_wrap,
273#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200274#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000275 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100276#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100277#if defined(MBEDTLS_CIPHER_MODE_XTS)
278 NULL,
279#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200280#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200281 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100282#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000283 aes_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800284#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker343a8702011-06-09 14:27:58 +0000285 aes_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800286#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000287 aes_ctx_alloc,
288 aes_ctx_free
289};
290
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200291static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100292 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100293 16,
294 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100295 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100296 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100297 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200298 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100299 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200300};
301
Yanray Wang7732ced2023-09-14 13:51:14 +0800302#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200303static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100304 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100305 16,
306 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100307 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100308 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100309 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200310 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100311 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200312};
313
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200314static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100315 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100316 16,
317 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100318 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100319 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100320 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200321 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100322 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200323};
Yanray Wang7732ced2023-09-14 13:51:14 +0800324#endif
Paul Bakker5e0efa72013-09-08 23:04:04 +0200325
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200326#if defined(MBEDTLS_CIPHER_MODE_CBC)
327static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100328 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100329 16,
330 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100331 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100332 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100333 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200334 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100335 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000336};
337
Yanray Wang7732ced2023-09-14 13:51:14 +0800338#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200339static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100340 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100341 16,
342 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100343 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100344 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100345 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200346 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100347 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000348};
349
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200350static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100351 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100352 16,
353 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100354 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100355 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100356 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200357 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100358 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000359};
Yanray Wang7732ced2023-09-14 13:51:14 +0800360#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200361#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000362
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200363#if defined(MBEDTLS_CIPHER_MODE_CFB)
364static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100365 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100366 16,
367 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100368 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100369 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100370 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200371 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100372 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000373};
374
Yanray Wang7732ced2023-09-14 13:51:14 +0800375#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200376static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100377 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100378 16,
379 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100380 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100381 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100382 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200383 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100384 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000385};
386
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200387static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100388 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100389 16,
390 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100391 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100392 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100393 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200394 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100395 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000396};
Yanray Wang7732ced2023-09-14 13:51:14 +0800397#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200398#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000399
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100400#if defined(MBEDTLS_CIPHER_MODE_OFB)
401static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100402 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100403 16,
404 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100405 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100406 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100407 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100408 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100409 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100410};
411
Yanray Wang7732ced2023-09-14 13:51:14 +0800412#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100413static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100414 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100415 16,
416 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100417 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100418 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100419 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100420 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100421 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100422};
423
424static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100425 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100426 16,
427 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100428 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100429 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100430 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100431 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100432 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100433};
Yanray Wang7732ced2023-09-14 13:51:14 +0800434#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100435#endif /* MBEDTLS_CIPHER_MODE_OFB */
436
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200437#if defined(MBEDTLS_CIPHER_MODE_CTR)
438static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100439 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100440 16,
441 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100442 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100443 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100444 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200445 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100446 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000447};
448
Yanray Wang7732ced2023-09-14 13:51:14 +0800449#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200450static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100451 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100452 16,
453 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100454 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100455 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100456 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200457 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100458 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000459};
460
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200461static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100462 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100463 16,
464 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100465 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100466 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100467 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200468 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100469 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000470};
Yanray Wang7732ced2023-09-14 13:51:14 +0800471#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200472#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000473
Jaeden Ameroc6539902018-04-30 17:17:41 +0100474#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100475static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
476 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100477{
478 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100479 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100480}
481
Gilles Peskine449bd832023-01-11 14:50:10 +0100482static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
483 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100484{
485 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100486 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100487}
488
Gilles Peskine449bd832023-01-11 14:50:10 +0100489static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100490{
Gilles Peskine449bd832023-01-11 14:50:10 +0100491 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100492
Gilles Peskine449bd832023-01-11 14:50:10 +0100493 if (xts_ctx != NULL) {
494 mbedtls_aes_xts_init(xts_ctx);
495 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100496
Gilles Peskine449bd832023-01-11 14:50:10 +0100497 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100498}
499
Gilles Peskine449bd832023-01-11 14:50:10 +0100500static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100501{
502 mbedtls_aes_xts_context *xts_ctx = ctx;
503
Gilles Peskine449bd832023-01-11 14:50:10 +0100504 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100505 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100506 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100507
Gilles Peskine449bd832023-01-11 14:50:10 +0100508 mbedtls_aes_xts_free(xts_ctx);
509 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100510}
511
512static const mbedtls_cipher_base_t xts_aes_info = {
513 MBEDTLS_CIPHER_ID_AES,
514 NULL,
515#if defined(MBEDTLS_CIPHER_MODE_CBC)
516 NULL,
517#endif
518#if defined(MBEDTLS_CIPHER_MODE_CFB)
519 NULL,
520#endif
521#if defined(MBEDTLS_CIPHER_MODE_OFB)
522 NULL,
523#endif
524#if defined(MBEDTLS_CIPHER_MODE_CTR)
525 NULL,
526#endif
527#if defined(MBEDTLS_CIPHER_MODE_XTS)
528 aes_crypt_xts_wrap,
529#endif
530#if defined(MBEDTLS_CIPHER_MODE_STREAM)
531 NULL,
532#endif
533 xts_aes_setkey_enc_wrap,
534 xts_aes_setkey_dec_wrap,
535 xts_aes_ctx_alloc,
536 xts_aes_ctx_free
537};
538
539static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100540 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100541 16,
542 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100543 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100544 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100545 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100546 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100547 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100548};
549
Yanray Wang7732ced2023-09-14 13:51:14 +0800550#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100551static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100552 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100553 16,
554 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100555 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100556 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100557 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100558 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100559 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100560};
Yanray Wang7732ced2023-09-14 13:51:14 +0800561#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100562#endif /* MBEDTLS_CIPHER_MODE_XTS */
Valerio Settia6c07612023-10-12 18:48:24 +0200563#endif /* MBEDTLS_AES_C */
Jaeden Ameroc6539902018-04-30 17:17:41 +0100564
Valerio Settia6c07612023-10-12 18:48:24 +0200565#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100566static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
567 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200568{
Gilles Peskine449bd832023-01-11 14:50:10 +0100569 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
570 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200571}
Valerio Settia6c07612023-10-12 18:48:24 +0200572#endif /* MBEDTLS_GCM_C && MBEDTLS_AES_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200573
Valerio Settia6c07612023-10-12 18:48:24 +0200574#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200575static const mbedtls_cipher_base_t gcm_aes_info = {
576 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200577 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200578#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200579 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100580#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200581#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200582 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100583#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100584#if defined(MBEDTLS_CIPHER_MODE_OFB)
585 NULL,
586#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200587#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200588 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100589#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100590#if defined(MBEDTLS_CIPHER_MODE_XTS)
591 NULL,
592#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200593#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200594 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100595#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200596#if defined(MBEDTLS_GCM_C)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200597 gcm_aes_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800598#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200599 gcm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800600#endif
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200601 gcm_ctx_alloc,
602 gcm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200603#else
604 NULL,
605 NULL,
606 NULL,
607 NULL,
608#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200609};
Valerio Settia6c07612023-10-12 18:48:24 +0200610#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200611
Valerio Settia6c07612023-10-12 18:48:24 +0200612#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200613static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100614 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100615 16,
616 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100617 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100618 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100619 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200620 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100621 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100622};
623
Yanray Wang7732ced2023-09-14 13:51:14 +0800624#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200625static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100626 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100627 16,
628 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100629 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100630 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100631 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200632 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100633 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200634};
635
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200636static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100637 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100638 16,
639 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100640 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100641 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100642 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200643 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100644 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100645};
Yanray Wang7732ced2023-09-14 13:51:14 +0800646#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200647#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Paul Bakker68884e32013-01-07 18:20:04 +0100648
Valerio Settia6c07612023-10-12 18:48:24 +0200649#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100650static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
651 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200652{
Gilles Peskine449bd832023-01-11 14:50:10 +0100653 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
654 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200655}
Valerio Settia6c07612023-10-12 18:48:24 +0200656#endif /* MBEDTLS_CCM_C && MBEDTLS_AES_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200657
Valerio Settia6c07612023-10-12 18:48:24 +0200658#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200659static const mbedtls_cipher_base_t ccm_aes_info = {
660 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200661 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200662#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200663 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100664#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200665#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200666 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100667#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100668#if defined(MBEDTLS_CIPHER_MODE_OFB)
669 NULL,
670#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200671#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200672 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100673#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100674#if defined(MBEDTLS_CIPHER_MODE_XTS)
675 NULL,
676#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200677#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200678 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100679#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200680#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200681 ccm_aes_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800682#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200683 ccm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800684#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200685 ccm_ctx_alloc,
686 ccm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200687#else
688 NULL,
689 NULL,
690 NULL,
691 NULL,
692#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200693};
Valerio Settia6c07612023-10-12 18:48:24 +0200694#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200695
Valerio Settia6c07612023-10-12 18:48:24 +0200696#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200697static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100698 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100699 16,
700 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100701 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100702 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100703 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200704 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100705 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200706};
707
Yanray Wang7732ced2023-09-14 13:51:14 +0800708#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200709static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100710 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100711 16,
712 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100713 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100714 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100715 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200716 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100717 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200718};
719
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200720static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100721 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100722 16,
723 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100724 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100725 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100726 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200727 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100728 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200729};
Yanray Wang7732ced2023-09-14 13:51:14 +0800730#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200731#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200732
Valerio Settia6c07612023-10-12 18:48:24 +0200733#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200734static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100735 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100736 16,
737 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100738 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100739 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100740 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200741 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100742 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200743};
744
Yanray Wang7732ced2023-09-14 13:51:14 +0800745#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200746static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100747 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100748 16,
749 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100750 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100751 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100752 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200753 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100754 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200755};
756
757static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100758 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100759 16,
760 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100761 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100762 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100763 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200764 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100765 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200766};
Yanray Wang7732ced2023-09-14 13:51:14 +0800767#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200768#endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200769
Paul Bakker8123e9d2011-01-06 15:37:30 +0000770
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200771#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000772
Gilles Peskine449bd832023-01-11 14:50:10 +0100773static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
774 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200775{
Gilles Peskine449bd832023-01-11 14:50:10 +0100776 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
777 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200778}
779
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200780#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100781static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
782 size_t length, unsigned char *iv,
783 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000784{
Gilles Peskine449bd832023-01-11 14:50:10 +0100785 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
786 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000787}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200788#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000789
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200790#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100791static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
792 size_t length, size_t *iv_off, unsigned char *iv,
793 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000794{
Gilles Peskine449bd832023-01-11 14:50:10 +0100795 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
796 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000797}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200798#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000799
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200800#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100801static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
802 unsigned char *nonce_counter, unsigned char *stream_block,
803 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000804{
Gilles Peskine449bd832023-01-11 14:50:10 +0100805 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
806 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000807}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200808#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000809
Yanray Wangb67b4742023-10-31 17:10:32 +0800810#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +0100811static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
812 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000813{
Gilles Peskine449bd832023-01-11 14:50:10 +0100814 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000815}
Yanray Wangdb9b3092023-08-24 15:47:53 +0800816#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +0000817
Gilles Peskine449bd832023-01-11 14:50:10 +0100818static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
819 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000820{
Gilles Peskine449bd832023-01-11 14:50:10 +0100821 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000822}
823
Gilles Peskine449bd832023-01-11 14:50:10 +0100824static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000825{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200826 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100827 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200828
Gilles Peskine449bd832023-01-11 14:50:10 +0100829 if (ctx == NULL) {
830 return NULL;
831 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200832
Gilles Peskine449bd832023-01-11 14:50:10 +0100833 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200834
Gilles Peskine449bd832023-01-11 14:50:10 +0100835 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000836}
837
Gilles Peskine449bd832023-01-11 14:50:10 +0100838static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000839{
Gilles Peskine449bd832023-01-11 14:50:10 +0100840 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
841 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000842}
843
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200844static const mbedtls_cipher_base_t camellia_info = {
845 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200846 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200847#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000848 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100849#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200850#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000851 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100852#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100853#if defined(MBEDTLS_CIPHER_MODE_OFB)
854 NULL,
855#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200856#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000857 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100858#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100859#if defined(MBEDTLS_CIPHER_MODE_XTS)
860 NULL,
861#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200862#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200863 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100864#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000865 camellia_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800866#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker343a8702011-06-09 14:27:58 +0000867 camellia_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800868#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000869 camellia_ctx_alloc,
870 camellia_ctx_free
871};
872
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200873static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100874 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100875 16,
876 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100877 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100878 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100879 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200880 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100881 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200882};
883
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200884static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100885 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100886 16,
887 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100888 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100889 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100890 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200891 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100892 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200893};
894
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200895static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100896 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100897 16,
898 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100899 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100900 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100901 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200902 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100903 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200904};
905
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200906#if defined(MBEDTLS_CIPHER_MODE_CBC)
907static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100908 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100909 16,
910 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100911 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100912 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100913 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200914 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100915 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000916};
917
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200918static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100919 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100920 16,
921 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100922 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100923 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100924 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200925 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100926 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000927};
928
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200929static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100930 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100931 16,
932 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100933 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100934 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100935 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200936 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100937 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000938};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200939#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000940
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200941#if defined(MBEDTLS_CIPHER_MODE_CFB)
942static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100943 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100944 16,
945 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100946 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100947 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100948 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200949 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100950 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000951};
952
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200953static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100954 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100955 16,
956 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100957 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100958 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100959 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200960 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100961 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000962};
963
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200964static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100965 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100966 16,
967 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100968 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100969 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100970 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200971 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100972 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000973};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200974#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000975
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200976#if defined(MBEDTLS_CIPHER_MODE_CTR)
977static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100978 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100979 16,
980 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100981 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100982 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100983 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200984 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100985 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000986};
987
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200988static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100989 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100990 16,
991 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100992 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100993 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100994 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200995 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100996 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000997};
998
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200999static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001000 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001001 16,
1002 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001003 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001004 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001005 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001006 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001007 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +00001008};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001009#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +00001010
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001011#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001012static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1013 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001014{
Gilles Peskine449bd832023-01-11 14:50:10 +01001015 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1016 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001017}
1018
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001019static const mbedtls_cipher_base_t gcm_camellia_info = {
1020 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001021 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001022#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001023 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001024#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001025#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001026 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001027#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001028#if defined(MBEDTLS_CIPHER_MODE_OFB)
1029 NULL,
1030#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001031#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001032 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001033#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001034#if defined(MBEDTLS_CIPHER_MODE_XTS)
1035 NULL,
1036#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001037#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001038 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001039#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001040 gcm_camellia_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001041#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001042 gcm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001043#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001044 gcm_ctx_alloc,
1045 gcm_ctx_free,
1046};
1047
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001048static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001049 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001050 16,
1051 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001052 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001053 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001054 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001055 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001056 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001057};
1058
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001059static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001060 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001061 16,
1062 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001063 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001064 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001065 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001066 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001067 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001068};
1069
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001070static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001071 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001072 16,
1073 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001074 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001075 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001076 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001077 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001078 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001079};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001080#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001081
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001082#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001083static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1084 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001085{
Gilles Peskine449bd832023-01-11 14:50:10 +01001086 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1087 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001088}
1089
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001090static const mbedtls_cipher_base_t ccm_camellia_info = {
1091 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001092 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001093#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001094 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001095#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001096#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001097 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001098#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001099#if defined(MBEDTLS_CIPHER_MODE_OFB)
1100 NULL,
1101#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001102#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001103 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001104#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001105#if defined(MBEDTLS_CIPHER_MODE_XTS)
1106 NULL,
1107#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001108#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001109 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001110#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001111 ccm_camellia_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001112#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001113 ccm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001114#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001115 ccm_ctx_alloc,
1116 ccm_ctx_free,
1117};
1118
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001119static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001120 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001121 16,
1122 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001123 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001124 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001125 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001126 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001127 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001128};
1129
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001130static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001131 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001132 16,
1133 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001134 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001135 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001136 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001137 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001138 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001139};
1140
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001141static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001142 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001143 16,
1144 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001145 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001146 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001147 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001148 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001149 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001150};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001151
1152static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001153 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001154 16,
1155 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001156 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001157 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001158 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001159 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001160 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001161};
1162
1163static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001164 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001165 16,
1166 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001167 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001168 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001169 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001170 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001171 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001172};
1173
1174static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001175 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001176 16,
1177 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001178 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001179 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001180 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001181 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001182 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001183};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001184#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001185
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001186#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001187
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001188#if defined(MBEDTLS_ARIA_C)
1189
Gilles Peskine449bd832023-01-11 14:50:10 +01001190static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1191 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001192{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001193 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001194 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1195 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001196}
1197
1198#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001199static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1200 size_t length, unsigned char *iv,
1201 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001202{
Gilles Peskine449bd832023-01-11 14:50:10 +01001203 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1204 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001205}
1206#endif /* MBEDTLS_CIPHER_MODE_CBC */
1207
1208#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001209static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1210 size_t length, size_t *iv_off, unsigned char *iv,
1211 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001212{
Gilles Peskine449bd832023-01-11 14:50:10 +01001213 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1214 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001215}
1216#endif /* MBEDTLS_CIPHER_MODE_CFB */
1217
1218#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001219static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1220 unsigned char *nonce_counter, unsigned char *stream_block,
1221 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001222{
Gilles Peskine449bd832023-01-11 14:50:10 +01001223 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1224 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001225}
1226#endif /* MBEDTLS_CIPHER_MODE_CTR */
1227
Yanray Wangb67b4742023-10-31 17:10:32 +08001228#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +01001229static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1230 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001231{
Gilles Peskine449bd832023-01-11 14:50:10 +01001232 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001233}
Yanray Wangdb9b3092023-08-24 15:47:53 +08001234#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001235
Gilles Peskine449bd832023-01-11 14:50:10 +01001236static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1237 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001238{
Gilles Peskine449bd832023-01-11 14:50:10 +01001239 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001240}
1241
Gilles Peskine449bd832023-01-11 14:50:10 +01001242static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001243{
1244 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001245 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001246
Gilles Peskine449bd832023-01-11 14:50:10 +01001247 if (ctx == NULL) {
1248 return NULL;
1249 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001250
Gilles Peskine449bd832023-01-11 14:50:10 +01001251 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001252
Gilles Peskine449bd832023-01-11 14:50:10 +01001253 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001254}
1255
Gilles Peskine449bd832023-01-11 14:50:10 +01001256static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001257{
Gilles Peskine449bd832023-01-11 14:50:10 +01001258 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1259 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001260}
1261
1262static const mbedtls_cipher_base_t aria_info = {
1263 MBEDTLS_CIPHER_ID_ARIA,
1264 aria_crypt_ecb_wrap,
1265#if defined(MBEDTLS_CIPHER_MODE_CBC)
1266 aria_crypt_cbc_wrap,
1267#endif
1268#if defined(MBEDTLS_CIPHER_MODE_CFB)
1269 aria_crypt_cfb128_wrap,
1270#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001271#if defined(MBEDTLS_CIPHER_MODE_OFB)
1272 NULL,
1273#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001274#if defined(MBEDTLS_CIPHER_MODE_CTR)
1275 aria_crypt_ctr_wrap,
1276#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001277#if defined(MBEDTLS_CIPHER_MODE_XTS)
1278 NULL,
1279#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001280#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1281 NULL,
1282#endif
1283 aria_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001284#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001285 aria_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001286#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001287 aria_ctx_alloc,
1288 aria_ctx_free
1289};
1290
1291static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001292 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001293 16,
1294 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001295 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001296 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001297 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001298 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001299 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001300};
1301
1302static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001303 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001304 16,
1305 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001306 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001307 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001308 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001309 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001310 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001311};
1312
1313static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001314 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001315 16,
1316 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001317 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001318 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001319 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001320 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001321 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001322};
1323
1324#if defined(MBEDTLS_CIPHER_MODE_CBC)
1325static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001326 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001327 16,
1328 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001329 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001330 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001331 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001332 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001333 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001334};
1335
1336static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001337 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001338 16,
1339 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001340 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001341 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001342 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001343 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001344 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001345};
1346
1347static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001348 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001349 16,
1350 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001351 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001352 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001353 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001354 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001355 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001356};
1357#endif /* MBEDTLS_CIPHER_MODE_CBC */
1358
1359#if defined(MBEDTLS_CIPHER_MODE_CFB)
1360static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001361 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001362 16,
1363 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001364 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001365 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001366 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001367 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001368 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001369};
1370
1371static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001372 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001373 16,
1374 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001375 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001376 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001377 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001378 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001379 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001380};
1381
1382static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001383 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001384 16,
1385 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001386 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001387 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001388 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001389 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001390 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001391};
1392#endif /* MBEDTLS_CIPHER_MODE_CFB */
1393
1394#if defined(MBEDTLS_CIPHER_MODE_CTR)
1395static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001396 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001397 16,
1398 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001399 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001400 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001401 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001402 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001403 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001404};
1405
1406static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001407 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001408 16,
1409 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001410 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001411 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001412 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001413 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001414 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001415};
1416
1417static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001418 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001419 16,
1420 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001421 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001422 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001423 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001424 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001425 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001426};
1427#endif /* MBEDTLS_CIPHER_MODE_CTR */
1428
1429#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001430static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1431 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001432{
Gilles Peskine449bd832023-01-11 14:50:10 +01001433 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1434 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001435}
1436
1437static const mbedtls_cipher_base_t gcm_aria_info = {
1438 MBEDTLS_CIPHER_ID_ARIA,
1439 NULL,
1440#if defined(MBEDTLS_CIPHER_MODE_CBC)
1441 NULL,
1442#endif
1443#if defined(MBEDTLS_CIPHER_MODE_CFB)
1444 NULL,
1445#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001446#if defined(MBEDTLS_CIPHER_MODE_OFB)
1447 NULL,
1448#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001449#if defined(MBEDTLS_CIPHER_MODE_CTR)
1450 NULL,
1451#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001452#if defined(MBEDTLS_CIPHER_MODE_XTS)
1453 NULL,
1454#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001455#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1456 NULL,
1457#endif
1458 gcm_aria_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001459#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001460 gcm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001461#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001462 gcm_ctx_alloc,
1463 gcm_ctx_free,
1464};
1465
1466static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001467 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001468 16,
1469 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001470 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001471 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001472 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001473 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001474 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001475};
1476
1477static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001478 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001479 16,
1480 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001481 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001482 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001483 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001484 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001485 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001486};
1487
1488static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001489 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001490 16,
1491 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001492 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001493 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001494 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001495 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001496 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001497};
1498#endif /* MBEDTLS_GCM_C */
1499
1500#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001501static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1502 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001503{
Gilles Peskine449bd832023-01-11 14:50:10 +01001504 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1505 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001506}
1507
1508static const mbedtls_cipher_base_t ccm_aria_info = {
1509 MBEDTLS_CIPHER_ID_ARIA,
1510 NULL,
1511#if defined(MBEDTLS_CIPHER_MODE_CBC)
1512 NULL,
1513#endif
1514#if defined(MBEDTLS_CIPHER_MODE_CFB)
1515 NULL,
1516#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001517#if defined(MBEDTLS_CIPHER_MODE_OFB)
1518 NULL,
1519#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001520#if defined(MBEDTLS_CIPHER_MODE_CTR)
1521 NULL,
1522#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001523#if defined(MBEDTLS_CIPHER_MODE_XTS)
1524 NULL,
1525#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001526#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1527 NULL,
1528#endif
1529 ccm_aria_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001530#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001531 ccm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001532#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001533 ccm_ctx_alloc,
1534 ccm_ctx_free,
1535};
1536
1537static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001538 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001539 16,
1540 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001541 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001542 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001543 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001544 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001545 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001546};
1547
1548static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001549 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001550 16,
1551 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001552 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001553 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001554 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001555 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001556 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001557};
1558
1559static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001560 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001561 16,
1562 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001563 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001564 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001565 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001566 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001567 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001568};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001569
1570static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001571 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001572 16,
1573 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001574 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001575 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001576 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001577 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001578 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001579};
1580
1581static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001582 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001583 16,
1584 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001585 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001586 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001587 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001588 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001589 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001590};
1591
1592static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001593 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001594 16,
1595 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001596 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001597 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001598 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001599 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001600 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001601};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001602#endif /* MBEDTLS_CCM_C */
1603
1604#endif /* MBEDTLS_ARIA_C */
1605
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001606#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001607
Gilles Peskine449bd832023-01-11 14:50:10 +01001608static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1609 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001610{
1611 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001612 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001613}
1614
Gilles Peskine449bd832023-01-11 14:50:10 +01001615static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1616 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001617{
1618 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001619 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001620}
1621
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001622#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001623static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1624 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001625{
Gilles Peskine449bd832023-01-11 14:50:10 +01001626 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1627 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001628}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001629#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001630
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001631#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001632static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1633 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001634{
Gilles Peskine449bd832023-01-11 14:50:10 +01001635 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1636 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001637}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001638#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001639
Gilles Peskine449bd832023-01-11 14:50:10 +01001640static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1641 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001642{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001643 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001644
Gilles Peskine449bd832023-01-11 14:50:10 +01001645 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001646}
1647
Gilles Peskine449bd832023-01-11 14:50:10 +01001648static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1649 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001650{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001651 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001652
Gilles Peskine449bd832023-01-11 14:50:10 +01001653 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001654}
1655
Gilles Peskine449bd832023-01-11 14:50:10 +01001656static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1657 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001658{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001659 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001660
Gilles Peskine449bd832023-01-11 14:50:10 +01001661 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001662}
1663
Gilles Peskine449bd832023-01-11 14:50:10 +01001664static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1665 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001666{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001667 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001668
Gilles Peskine449bd832023-01-11 14:50:10 +01001669 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001670}
1671
Gilles Peskine449bd832023-01-11 14:50:10 +01001672static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1673 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001674{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001675 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001676
Gilles Peskine449bd832023-01-11 14:50:10 +01001677 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001678}
1679
Gilles Peskine449bd832023-01-11 14:50:10 +01001680static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1681 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001682{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001683 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001684
Gilles Peskine449bd832023-01-11 14:50:10 +01001685 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001686}
1687
Gilles Peskine449bd832023-01-11 14:50:10 +01001688static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001689{
Gilles Peskine449bd832023-01-11 14:50:10 +01001690 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001691
Gilles Peskine449bd832023-01-11 14:50:10 +01001692 if (des == NULL) {
1693 return NULL;
1694 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001695
Gilles Peskine449bd832023-01-11 14:50:10 +01001696 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001697
Gilles Peskine449bd832023-01-11 14:50:10 +01001698 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001699}
1700
Gilles Peskine449bd832023-01-11 14:50:10 +01001701static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001702{
Gilles Peskine449bd832023-01-11 14:50:10 +01001703 mbedtls_des_free((mbedtls_des_context *) ctx);
1704 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001705}
1706
Gilles Peskine449bd832023-01-11 14:50:10 +01001707static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001708{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001709 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001710 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001711
Gilles Peskine449bd832023-01-11 14:50:10 +01001712 if (des3 == NULL) {
1713 return NULL;
1714 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001715
Gilles Peskine449bd832023-01-11 14:50:10 +01001716 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001717
Gilles Peskine449bd832023-01-11 14:50:10 +01001718 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001719}
1720
Gilles Peskine449bd832023-01-11 14:50:10 +01001721static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001722{
Gilles Peskine449bd832023-01-11 14:50:10 +01001723 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1724 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001725}
1726
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001727static const mbedtls_cipher_base_t des_info = {
1728 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001729 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001730#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001731 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001732#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001733#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001734 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001735#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001736#if defined(MBEDTLS_CIPHER_MODE_OFB)
1737 NULL,
1738#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001739#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001740 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001741#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001742#if defined(MBEDTLS_CIPHER_MODE_XTS)
1743 NULL,
1744#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001745#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001746 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001747#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001748 des_setkey_enc_wrap,
1749 des_setkey_dec_wrap,
1750 des_ctx_alloc,
1751 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001752};
1753
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001754static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001755 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001756 8,
1757 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001758 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001759 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001760 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001761 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001762 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001763};
1764
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001765#if defined(MBEDTLS_CIPHER_MODE_CBC)
1766static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001767 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001768 8,
1769 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001770 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001771 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001772 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001773 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001774 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001775};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001776#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001777
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001778static const mbedtls_cipher_base_t des_ede_info = {
1779 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001780 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001781#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001782 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001783#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001784#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001785 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001786#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001787#if defined(MBEDTLS_CIPHER_MODE_OFB)
1788 NULL,
1789#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001790#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001791 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001792#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001793#if defined(MBEDTLS_CIPHER_MODE_XTS)
1794 NULL,
1795#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001796#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001797 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001798#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001799 des3_set2key_enc_wrap,
1800 des3_set2key_dec_wrap,
1801 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001802 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001803};
1804
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001805static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001806 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001807 8,
1808 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001809 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001810 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001811 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001812 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001813 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001814};
1815
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001816#if defined(MBEDTLS_CIPHER_MODE_CBC)
1817static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001818 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001819 8,
1820 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001821 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001822 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001823 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001824 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001825 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001826};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001827#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001828
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001829static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001830 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001831 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001832#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001833 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001834#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001835#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001836 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001837#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001838#if defined(MBEDTLS_CIPHER_MODE_OFB)
1839 NULL,
1840#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001841#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001842 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001843#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001844#if defined(MBEDTLS_CIPHER_MODE_XTS)
1845 NULL,
1846#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001847#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001848 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001849#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001850 des3_set3key_enc_wrap,
1851 des3_set3key_dec_wrap,
1852 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001853 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001854};
1855
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001856static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001857 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001858 8,
1859 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001860 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001861 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001862 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001863 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001864 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001865};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001866#if defined(MBEDTLS_CIPHER_MODE_CBC)
1867static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001868 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001869 8,
1870 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001871 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001872 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001873 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001874 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001875 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001876};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001877#endif /* MBEDTLS_CIPHER_MODE_CBC */
1878#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001879
Daniel Kingbd920622016-05-15 19:56:20 -03001880#if defined(MBEDTLS_CHACHA20_C)
1881
Gilles Peskine449bd832023-01-11 14:50:10 +01001882static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1883 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001884{
Gilles Peskine449bd832023-01-11 14:50:10 +01001885 if (key_bitlen != 256U) {
1886 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1887 }
Daniel Kingbd920622016-05-15 19:56:20 -03001888
Gilles Peskine449bd832023-01-11 14:50:10 +01001889 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
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 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001894}
1895
Gilles Peskine449bd832023-01-11 14:50:10 +01001896static int chacha20_stream_wrap(void *ctx, size_t length,
1897 const unsigned char *input,
1898 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001899{
Janos Follath24eed8d2019-11-22 13:21:35 +00001900 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001901
Gilles Peskine449bd832023-01-11 14:50:10 +01001902 ret = mbedtls_chacha20_update(ctx, length, input, output);
1903 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1904 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1905 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001906
Gilles Peskine449bd832023-01-11 14:50:10 +01001907 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001908}
1909
Gilles Peskine449bd832023-01-11 14:50:10 +01001910static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001911{
1912 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001913 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001914
Gilles Peskine449bd832023-01-11 14:50:10 +01001915 if (ctx == NULL) {
1916 return NULL;
1917 }
Daniel Kingbd920622016-05-15 19:56:20 -03001918
Gilles Peskine449bd832023-01-11 14:50:10 +01001919 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001920
Gilles Peskine449bd832023-01-11 14:50:10 +01001921 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001922}
1923
Gilles Peskine449bd832023-01-11 14:50:10 +01001924static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001925{
Gilles Peskine449bd832023-01-11 14:50:10 +01001926 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1927 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001928}
1929
1930static const mbedtls_cipher_base_t chacha20_base_info = {
1931 MBEDTLS_CIPHER_ID_CHACHA20,
1932 NULL,
1933#if defined(MBEDTLS_CIPHER_MODE_CBC)
1934 NULL,
1935#endif
1936#if defined(MBEDTLS_CIPHER_MODE_CFB)
1937 NULL,
1938#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001939#if defined(MBEDTLS_CIPHER_MODE_OFB)
1940 NULL,
1941#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001942#if defined(MBEDTLS_CIPHER_MODE_CTR)
1943 NULL,
1944#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001945#if defined(MBEDTLS_CIPHER_MODE_XTS)
1946 NULL,
1947#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001948#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001949 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001950#endif
1951 chacha20_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001952#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Daniel Kingbd920622016-05-15 19:56:20 -03001953 chacha20_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001954#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001955 chacha20_ctx_alloc,
1956 chacha20_ctx_free
1957};
1958static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001959 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001960 1,
1961 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001962 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001963 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001964 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001965 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001966 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001967};
1968#endif /* MBEDTLS_CHACHA20_C */
1969
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001970#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001971
Gilles Peskine449bd832023-01-11 14:50:10 +01001972static int chachapoly_setkey_wrap(void *ctx,
1973 const unsigned char *key,
1974 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001975{
Gilles Peskine449bd832023-01-11 14:50:10 +01001976 if (key_bitlen != 256U) {
1977 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1978 }
Daniel King8fe47012016-05-17 20:33:28 -03001979
Gilles Peskine449bd832023-01-11 14:50:10 +01001980 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
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 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001985}
1986
Gilles Peskine449bd832023-01-11 14:50:10 +01001987static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001988{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001989 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001990 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001991
Gilles Peskine449bd832023-01-11 14:50:10 +01001992 if (ctx == NULL) {
1993 return NULL;
1994 }
Daniel King8fe47012016-05-17 20:33:28 -03001995
Gilles Peskine449bd832023-01-11 14:50:10 +01001996 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001997
Gilles Peskine449bd832023-01-11 14:50:10 +01001998 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001999}
2000
Gilles Peskine449bd832023-01-11 14:50:10 +01002001static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03002002{
Gilles Peskine449bd832023-01-11 14:50:10 +01002003 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
2004 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03002005}
2006
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002007static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03002008 MBEDTLS_CIPHER_ID_CHACHA20,
2009 NULL,
2010#if defined(MBEDTLS_CIPHER_MODE_CBC)
2011 NULL,
2012#endif
2013#if defined(MBEDTLS_CIPHER_MODE_CFB)
2014 NULL,
2015#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002016#if defined(MBEDTLS_CIPHER_MODE_OFB)
2017 NULL,
2018#endif
Daniel King8fe47012016-05-17 20:33:28 -03002019#if defined(MBEDTLS_CIPHER_MODE_CTR)
2020 NULL,
2021#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002022#if defined(MBEDTLS_CIPHER_MODE_XTS)
2023 NULL,
2024#endif
Daniel King8fe47012016-05-17 20:33:28 -03002025#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2026 NULL,
2027#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002028 chachapoly_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08002029#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002030 chachapoly_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002031#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002032 chachapoly_ctx_alloc,
2033 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002034};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002035static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002036 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002037 1,
2038 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002039 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002040 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002041 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002042 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002043 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002044};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002045#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002046
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002047#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002048static int null_crypt_stream(void *ctx, size_t length,
2049 const unsigned char *input,
2050 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002051{
2052 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002053 memmove(output, input, length);
2054 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002055}
2056
Gilles Peskine449bd832023-01-11 14:50:10 +01002057static int null_setkey(void *ctx, const unsigned char *key,
2058 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002059{
2060 ((void) ctx);
2061 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002062 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002063
Gilles Peskine449bd832023-01-11 14:50:10 +01002064 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002065}
2066
Gilles Peskine449bd832023-01-11 14:50:10 +01002067static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002068{
Gilles Peskine449bd832023-01-11 14:50:10 +01002069 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002070}
2071
Gilles Peskine449bd832023-01-11 14:50:10 +01002072static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002073{
2074 ((void) ctx);
2075}
2076
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002077static const mbedtls_cipher_base_t null_base_info = {
2078 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002079 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002080#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002081 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002082#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002083#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002084 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002085#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002086#if defined(MBEDTLS_CIPHER_MODE_OFB)
2087 NULL,
2088#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002089#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002090 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002091#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002092#if defined(MBEDTLS_CIPHER_MODE_XTS)
2093 NULL,
2094#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002095#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002096 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002097#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002098 null_setkey,
Yanray Wangb67b4742023-10-31 17:10:32 +08002099#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002100 null_setkey,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002101#endif
Paul Bakkerfab5c822012-02-06 16:45:10 +00002102 null_ctx_alloc,
2103 null_ctx_free
2104};
2105
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002106static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002107 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002108 1,
2109 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002110 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002111 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002112 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002113 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002114 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002115};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002116#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002117
Jack Lloydffdf2882019-03-07 17:00:32 -05002118#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002119static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002120{
Gilles Peskine449bd832023-01-11 14:50:10 +01002121 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002122
Gilles Peskine449bd832023-01-11 14:50:10 +01002123 if (ctx != NULL) {
2124 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2125 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002126
Gilles Peskine449bd832023-01-11 14:50:10 +01002127 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002128}
2129
Gilles Peskine449bd832023-01-11 14:50:10 +01002130static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002131{
Gilles Peskine449bd832023-01-11 14:50:10 +01002132 mbedtls_nist_kw_free(ctx);
2133 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002134}
2135
Gilles Peskine449bd832023-01-11 14:50:10 +01002136static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2137 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002138{
Gilles Peskine449bd832023-01-11 14:50:10 +01002139 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2140 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002141}
2142
Gilles Peskine449bd832023-01-11 14:50:10 +01002143static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2144 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002145{
Gilles Peskine449bd832023-01-11 14:50:10 +01002146 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2147 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002148}
2149
2150static const mbedtls_cipher_base_t kw_aes_info = {
2151 MBEDTLS_CIPHER_ID_AES,
2152 NULL,
2153#if defined(MBEDTLS_CIPHER_MODE_CBC)
2154 NULL,
2155#endif
2156#if defined(MBEDTLS_CIPHER_MODE_CFB)
2157 NULL,
2158#endif
2159#if defined(MBEDTLS_CIPHER_MODE_OFB)
2160 NULL,
2161#endif
2162#if defined(MBEDTLS_CIPHER_MODE_CTR)
2163 NULL,
2164#endif
2165#if defined(MBEDTLS_CIPHER_MODE_XTS)
2166 NULL,
2167#endif
2168#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2169 NULL,
2170#endif
2171 kw_aes_setkey_wrap,
2172 kw_aes_setkey_unwrap,
2173 kw_ctx_alloc,
2174 kw_ctx_free,
2175};
2176
2177static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002178 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002179 16,
2180 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002181 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002182 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002183 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002184 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002185 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002186};
2187
Yanray Wang7732ced2023-09-14 13:51:14 +08002188#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002189static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002190 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002191 16,
2192 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002193 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002194 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002195 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002196 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002197 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002198};
2199
2200static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002201 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002202 16,
2203 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002204 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002205 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002206 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002207 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002208 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002209};
Yanray Wang7732ced2023-09-14 13:51:14 +08002210#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002211
2212static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002213 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002214 16,
2215 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002216 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002217 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002218 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002219 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002220 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002221};
2222
Yanray Wang7732ced2023-09-14 13:51:14 +08002223#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002224static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002225 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002226 16,
2227 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002228 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002229 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002230 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002231 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002232 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002233};
2234
2235static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002236 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002237 16,
2238 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002239 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002240 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002241 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002242 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002243 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002244};
Yanray Wang7732ced2023-09-14 13:51:14 +08002245#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002246#endif /* MBEDTLS_NIST_KW_C */
2247
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002248const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002249{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002250#if defined(MBEDTLS_AES_C)
2251 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002252#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002253 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2254 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002255#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002256#if defined(MBEDTLS_CIPHER_MODE_CBC)
2257 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002258#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002259 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2260 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002261#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002262#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002263#if defined(MBEDTLS_CIPHER_MODE_CFB)
2264 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002265#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002266 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2267 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002268#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002269#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002270#if defined(MBEDTLS_CIPHER_MODE_OFB)
2271 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002272#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002273 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2274 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2275#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002276#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002277#if defined(MBEDTLS_CIPHER_MODE_CTR)
2278 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002279#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002280 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2281 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002282#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002283#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002284#if defined(MBEDTLS_CIPHER_MODE_XTS)
2285 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002286#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002287 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2288#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002289#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002290#endif /* MBEDTLS_AES_C */
2291#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002292 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002293#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002294 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2295 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002296#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002297#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002298#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002299 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002300#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002301 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2302 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002303#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002304#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002305#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002306 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002307#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002308 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2309 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002310#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002311#endif
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002312
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002313#if defined(MBEDTLS_CAMELLIA_C)
2314 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2315 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2316 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2317#if defined(MBEDTLS_CIPHER_MODE_CBC)
2318 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2319 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2320 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002321#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002322#if defined(MBEDTLS_CIPHER_MODE_CFB)
2323 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2324 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2325 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002326#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002327#if defined(MBEDTLS_CIPHER_MODE_CTR)
2328 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2329 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2330 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002331#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002332#if defined(MBEDTLS_GCM_C)
2333 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2334 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2335 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002336#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002337#if defined(MBEDTLS_CCM_C)
2338 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2339 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2340 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002341 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2342 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2343 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002344#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002345#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002346
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002347#if defined(MBEDTLS_ARIA_C)
2348 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2349 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2350 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2351#if defined(MBEDTLS_CIPHER_MODE_CBC)
2352 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2353 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2354 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2355#endif
2356#if defined(MBEDTLS_CIPHER_MODE_CFB)
2357 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2358 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2359 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2360#endif
2361#if defined(MBEDTLS_CIPHER_MODE_CTR)
2362 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2363 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2364 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2365#endif
2366#if defined(MBEDTLS_GCM_C)
2367 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2368 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2369 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2370#endif
2371#if defined(MBEDTLS_CCM_C)
2372 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2373 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2374 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002375 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2376 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2377 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002378#endif
2379#endif /* MBEDTLS_ARIA_C */
2380
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002381#if defined(MBEDTLS_DES_C)
2382 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2383 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2384 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2385#if defined(MBEDTLS_CIPHER_MODE_CBC)
2386 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2387 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2388 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002389#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002390#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002391
Daniel Kingbd920622016-05-15 19:56:20 -03002392#if defined(MBEDTLS_CHACHA20_C)
2393 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2394#endif
2395
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002396#if defined(MBEDTLS_CHACHAPOLY_C)
2397 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002398#endif
2399
Jack Lloydffdf2882019-03-07 17:00:32 -05002400#if defined(MBEDTLS_NIST_KW_C)
2401 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002402#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002403 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2404 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002405#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002406 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002407#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002408 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2409 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2410#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002411#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002412
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002413#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2414 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2415#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002416
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002417 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002418};
2419
Gilles Peskine449bd832023-01-11 14:50:10 +01002420#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2421 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002422int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002423
Dave Rodgman3b46b772023-06-24 13:25:06 +01002424const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002425#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002426 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002427#endif
2428#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002429 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002430#endif
2431#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002432 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002433#endif
Valerio Settidcee9872023-10-16 11:35:57 +02002434#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002435 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002436#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002437#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002438 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002439#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002440#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002441 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002442#endif
2443#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002444 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002445#endif
2446#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002447 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002448#endif
2449#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002450 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002451#endif
2452#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002453 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002454#endif
2455#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002456 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002457#endif
Valerio Settidcee9872023-10-16 11:35:57 +02002458#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002459 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002460#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002461#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002462 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002463#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002464#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002465 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002466#endif
2467#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002468 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002469#endif
2470#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002471 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002472#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002473#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002474 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002475#endif
2476};
2477
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002478#endif /* MBEDTLS_CIPHER_C */