blob: ef3aa8df0d24e912957f34934e1bfa2107c7f0d1 [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
Gilles Peskine449bd832023-01-11 14:50:10 +0100229static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
230 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000231{
Gilles Peskine449bd832023-01-11 14:50:10 +0100232 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000233}
234
Gilles Peskine449bd832023-01-11 14:50:10 +0100235static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
236 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000237{
Gilles Peskine449bd832023-01-11 14:50:10 +0100238 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000239}
240
Gilles Peskine449bd832023-01-11 14:50:10 +0100241static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000242{
Gilles Peskine449bd832023-01-11 14:50:10 +0100243 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200244
Gilles Peskine449bd832023-01-11 14:50:10 +0100245 if (aes == NULL) {
246 return NULL;
247 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200248
Gilles Peskine449bd832023-01-11 14:50:10 +0100249 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200250
Gilles Peskine449bd832023-01-11 14:50:10 +0100251 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000252}
253
Gilles Peskine449bd832023-01-11 14:50:10 +0100254static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000255{
Gilles Peskine449bd832023-01-11 14:50:10 +0100256 mbedtls_aes_free((mbedtls_aes_context *) ctx);
257 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000258}
259
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200260static const mbedtls_cipher_base_t aes_info = {
261 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200262 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200263#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000264 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100265#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200266#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000267 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100268#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100269#if defined(MBEDTLS_CIPHER_MODE_OFB)
270 aes_crypt_ofb_wrap,
271#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200272#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000273 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100274#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100275#if defined(MBEDTLS_CIPHER_MODE_XTS)
276 NULL,
277#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200278#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200279 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100280#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000281 aes_setkey_enc_wrap,
282 aes_setkey_dec_wrap,
283 aes_ctx_alloc,
284 aes_ctx_free
285};
286
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200287static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100288 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100289 16,
290 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100291 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100292 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100293 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200294 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100295 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200296};
297
Yanray Wang7732ced2023-09-14 13:51:14 +0800298#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200299static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100300 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100301 16,
302 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100303 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100304 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100305 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200306 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100307 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200308};
309
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200310static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100311 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100312 16,
313 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100314 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100315 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100316 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200317 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100318 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200319};
Yanray Wang7732ced2023-09-14 13:51:14 +0800320#endif
Paul Bakker5e0efa72013-09-08 23:04:04 +0200321
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200322#if defined(MBEDTLS_CIPHER_MODE_CBC)
323static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100324 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100325 16,
326 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100327 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100328 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100329 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200330 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100331 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000332};
333
Yanray Wang7732ced2023-09-14 13:51:14 +0800334#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200335static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100336 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100337 16,
338 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100339 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100340 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100341 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200342 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100343 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000344};
345
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200346static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100347 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100348 16,
349 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100350 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100351 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100352 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200353 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100354 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000355};
Yanray Wang7732ced2023-09-14 13:51:14 +0800356#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200357#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000358
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200359#if defined(MBEDTLS_CIPHER_MODE_CFB)
360static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100361 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100362 16,
363 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100364 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100365 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100366 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200367 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100368 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000369};
370
Yanray Wang7732ced2023-09-14 13:51:14 +0800371#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200372static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100373 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100374 16,
375 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100376 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100377 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100378 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200379 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100380 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000381};
382
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200383static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100384 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100385 16,
386 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100387 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100388 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100389 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200390 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100391 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000392};
Yanray Wang7732ced2023-09-14 13:51:14 +0800393#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200394#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000395
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100396#if defined(MBEDTLS_CIPHER_MODE_OFB)
397static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100398 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100399 16,
400 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100401 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100402 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100403 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100404 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100405 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100406};
407
Yanray Wang7732ced2023-09-14 13:51:14 +0800408#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100409static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100410 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100411 16,
412 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100413 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100414 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100415 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100416 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100417 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100418};
419
420static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100421 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100422 16,
423 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100424 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100425 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100426 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100427 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100428 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100429};
Yanray Wang7732ced2023-09-14 13:51:14 +0800430#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100431#endif /* MBEDTLS_CIPHER_MODE_OFB */
432
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200433#if defined(MBEDTLS_CIPHER_MODE_CTR)
434static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100435 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100436 16,
437 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100438 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100439 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100440 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200441 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100442 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000443};
444
Yanray Wang7732ced2023-09-14 13:51:14 +0800445#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200446static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100447 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100448 16,
449 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100450 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100451 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100452 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200453 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100454 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000455};
456
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200457static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100458 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100459 16,
460 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100461 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100462 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100463 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200464 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100465 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000466};
Yanray Wang7732ced2023-09-14 13:51:14 +0800467#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200468#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000469
Jaeden Ameroc6539902018-04-30 17:17:41 +0100470#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100471static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
472 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100473{
474 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100475 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100476}
477
Gilles Peskine449bd832023-01-11 14:50:10 +0100478static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
479 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100480{
481 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100482 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100483}
484
Gilles Peskine449bd832023-01-11 14:50:10 +0100485static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100486{
Gilles Peskine449bd832023-01-11 14:50:10 +0100487 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100488
Gilles Peskine449bd832023-01-11 14:50:10 +0100489 if (xts_ctx != NULL) {
490 mbedtls_aes_xts_init(xts_ctx);
491 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100492
Gilles Peskine449bd832023-01-11 14:50:10 +0100493 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100494}
495
Gilles Peskine449bd832023-01-11 14:50:10 +0100496static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100497{
498 mbedtls_aes_xts_context *xts_ctx = ctx;
499
Gilles Peskine449bd832023-01-11 14:50:10 +0100500 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100501 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100502 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100503
Gilles Peskine449bd832023-01-11 14:50:10 +0100504 mbedtls_aes_xts_free(xts_ctx);
505 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100506}
507
508static const mbedtls_cipher_base_t xts_aes_info = {
509 MBEDTLS_CIPHER_ID_AES,
510 NULL,
511#if defined(MBEDTLS_CIPHER_MODE_CBC)
512 NULL,
513#endif
514#if defined(MBEDTLS_CIPHER_MODE_CFB)
515 NULL,
516#endif
517#if defined(MBEDTLS_CIPHER_MODE_OFB)
518 NULL,
519#endif
520#if defined(MBEDTLS_CIPHER_MODE_CTR)
521 NULL,
522#endif
523#if defined(MBEDTLS_CIPHER_MODE_XTS)
524 aes_crypt_xts_wrap,
525#endif
526#if defined(MBEDTLS_CIPHER_MODE_STREAM)
527 NULL,
528#endif
529 xts_aes_setkey_enc_wrap,
530 xts_aes_setkey_dec_wrap,
531 xts_aes_ctx_alloc,
532 xts_aes_ctx_free
533};
534
535static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100536 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100537 16,
538 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100539 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100540 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100541 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100542 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100543 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100544};
545
Yanray Wang7732ced2023-09-14 13:51:14 +0800546#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100547static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100548 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100549 16,
550 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100551 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100552 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100553 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100554 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100555 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100556};
Yanray Wang7732ced2023-09-14 13:51:14 +0800557#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100558#endif /* MBEDTLS_CIPHER_MODE_XTS */
Valerio Settia6c07612023-10-12 18:48:24 +0200559#endif /* MBEDTLS_AES_C */
Jaeden Ameroc6539902018-04-30 17:17:41 +0100560
Valerio Settia6c07612023-10-12 18:48:24 +0200561#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100562static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
563 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200564{
Gilles Peskine449bd832023-01-11 14:50:10 +0100565 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
566 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200567}
Valerio Settia6c07612023-10-12 18:48:24 +0200568#endif /* MBEDTLS_GCM_C && MBEDTLS_AES_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200569
Valerio Settia6c07612023-10-12 18:48:24 +0200570#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200571static const mbedtls_cipher_base_t gcm_aes_info = {
572 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200573 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200574#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200575 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100576#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200577#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200578 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100579#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100580#if defined(MBEDTLS_CIPHER_MODE_OFB)
581 NULL,
582#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200583#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200584 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100585#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100586#if defined(MBEDTLS_CIPHER_MODE_XTS)
587 NULL,
588#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200589#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200590 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100591#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200592#if defined(MBEDTLS_GCM_C)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200593 gcm_aes_setkey_wrap,
594 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200595 gcm_ctx_alloc,
596 gcm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200597#else
598 NULL,
599 NULL,
600 NULL,
601 NULL,
602#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200603};
Valerio Settia6c07612023-10-12 18:48:24 +0200604#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200605
Valerio Settia6c07612023-10-12 18:48:24 +0200606#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200607static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100608 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100609 16,
610 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100611 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100612 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100613 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200614 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100615 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100616};
617
Yanray Wang7732ced2023-09-14 13:51:14 +0800618#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200619static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100620 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100621 16,
622 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100623 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100624 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100625 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200626 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100627 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200628};
629
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200630static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100631 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100632 16,
633 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100634 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100635 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100636 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200637 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100638 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100639};
Yanray Wang7732ced2023-09-14 13:51:14 +0800640#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200641#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
Paul Bakker68884e32013-01-07 18:20:04 +0100642
Valerio Settia6c07612023-10-12 18:48:24 +0200643#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100644static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
645 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200646{
Gilles Peskine449bd832023-01-11 14:50:10 +0100647 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
648 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200649}
Valerio Settia6c07612023-10-12 18:48:24 +0200650#endif /* MBEDTLS_CCM_C && MBEDTLS_AES_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200651
Valerio Settia6c07612023-10-12 18:48:24 +0200652#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200653static const mbedtls_cipher_base_t ccm_aes_info = {
654 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200655 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200656#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200657 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100658#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200659#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200660 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100661#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100662#if defined(MBEDTLS_CIPHER_MODE_OFB)
663 NULL,
664#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200665#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200666 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100667#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100668#if defined(MBEDTLS_CIPHER_MODE_XTS)
669 NULL,
670#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200671#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200672 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100673#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200674#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200675 ccm_aes_setkey_wrap,
676 ccm_aes_setkey_wrap,
677 ccm_ctx_alloc,
678 ccm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200679#else
680 NULL,
681 NULL,
682 NULL,
683 NULL,
684#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200685};
Valerio Settia6c07612023-10-12 18:48:24 +0200686#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200687
Valerio Settia6c07612023-10-12 18:48:24 +0200688#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200689static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100690 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100691 16,
692 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100693 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100694 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100695 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200696 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100697 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200698};
699
Yanray Wang7732ced2023-09-14 13:51:14 +0800700#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200701static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100702 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100703 16,
704 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100705 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100706 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100707 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200708 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100709 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200710};
711
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200712static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100713 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100714 16,
715 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100716 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100717 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100718 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200719 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100720 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200721};
Yanray Wang7732ced2023-09-14 13:51:14 +0800722#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200723#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200724
Valerio Settia6c07612023-10-12 18:48:24 +0200725#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200726static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100727 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100728 16,
729 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100730 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100731 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100732 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200733 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100734 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200735};
736
Yanray Wang7732ced2023-09-14 13:51:14 +0800737#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200738static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100739 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100740 16,
741 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100742 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100743 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100744 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200745 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100746 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200747};
748
749static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100750 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100751 16,
752 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100753 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100754 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100755 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200756 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100757 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200758};
Yanray Wang7732ced2023-09-14 13:51:14 +0800759#endif
Valerio Settia6c07612023-10-12 18:48:24 +0200760#endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200761
Paul Bakker8123e9d2011-01-06 15:37:30 +0000762
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200763#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000764
Gilles Peskine449bd832023-01-11 14:50:10 +0100765static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
766 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200767{
Gilles Peskine449bd832023-01-11 14:50:10 +0100768 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
769 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200770}
771
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200772#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100773static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
774 size_t length, unsigned char *iv,
775 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000776{
Gilles Peskine449bd832023-01-11 14:50:10 +0100777 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
778 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000779}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200780#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000781
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200782#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100783static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
784 size_t length, size_t *iv_off, unsigned char *iv,
785 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000786{
Gilles Peskine449bd832023-01-11 14:50:10 +0100787 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
788 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000789}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200790#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000791
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200792#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100793static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
794 unsigned char *nonce_counter, unsigned char *stream_block,
795 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000796{
Gilles Peskine449bd832023-01-11 14:50:10 +0100797 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
798 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000799}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200800#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000801
Gilles Peskine449bd832023-01-11 14:50:10 +0100802static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
803 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000804{
Gilles Peskine449bd832023-01-11 14:50:10 +0100805 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000806}
807
Gilles Peskine449bd832023-01-11 14:50:10 +0100808static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
809 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000810{
Gilles Peskine449bd832023-01-11 14:50:10 +0100811 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000812}
813
Gilles Peskine449bd832023-01-11 14:50:10 +0100814static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000815{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200816 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100817 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200818
Gilles Peskine449bd832023-01-11 14:50:10 +0100819 if (ctx == NULL) {
820 return NULL;
821 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200822
Gilles Peskine449bd832023-01-11 14:50:10 +0100823 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200824
Gilles Peskine449bd832023-01-11 14:50:10 +0100825 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000826}
827
Gilles Peskine449bd832023-01-11 14:50:10 +0100828static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000829{
Gilles Peskine449bd832023-01-11 14:50:10 +0100830 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
831 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000832}
833
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200834static const mbedtls_cipher_base_t camellia_info = {
835 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200836 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200837#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000838 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100839#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200840#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000841 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100842#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100843#if defined(MBEDTLS_CIPHER_MODE_OFB)
844 NULL,
845#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200846#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000847 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100848#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100849#if defined(MBEDTLS_CIPHER_MODE_XTS)
850 NULL,
851#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200852#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200853 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100854#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000855 camellia_setkey_enc_wrap,
856 camellia_setkey_dec_wrap,
857 camellia_ctx_alloc,
858 camellia_ctx_free
859};
860
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200861static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100862 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100863 16,
864 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100865 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100866 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100867 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200868 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100869 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200870};
871
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200872static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100873 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100874 16,
875 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100876 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100877 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100878 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200879 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100880 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200881};
882
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200883static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100884 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100885 16,
886 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100887 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100888 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100889 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200890 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100891 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200892};
893
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200894#if defined(MBEDTLS_CIPHER_MODE_CBC)
895static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100896 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100897 16,
898 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100899 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100900 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100901 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200902 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100903 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000904};
905
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200906static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100907 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100908 16,
909 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100910 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100911 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100912 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200913 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100914 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000915};
916
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200917static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100918 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100919 16,
920 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100921 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100922 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100923 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200924 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100925 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000926};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200927#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000928
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200929#if defined(MBEDTLS_CIPHER_MODE_CFB)
930static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100931 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100932 16,
933 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100934 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100935 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100936 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200937 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100938 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000939};
940
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200941static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100942 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100943 16,
944 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100945 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100946 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100947 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200948 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100949 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000950};
951
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200952static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100953 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100954 16,
955 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100956 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100957 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100958 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200959 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100960 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000961};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200962#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000963
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200964#if defined(MBEDTLS_CIPHER_MODE_CTR)
965static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100966 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100967 16,
968 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100969 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100970 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100971 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200972 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100973 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000974};
975
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200976static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100977 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100978 16,
979 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100980 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100981 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100982 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200983 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100984 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000985};
986
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200987static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100988 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100989 16,
990 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100991 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100992 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100993 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200994 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100995 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000996};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200997#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000998
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200999#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001000static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1001 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001002{
Gilles Peskine449bd832023-01-11 14:50:10 +01001003 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1004 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001005}
1006
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001007static const mbedtls_cipher_base_t gcm_camellia_info = {
1008 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001009 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001010#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001011 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001012#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001013#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001014 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001015#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001016#if defined(MBEDTLS_CIPHER_MODE_OFB)
1017 NULL,
1018#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001019#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001020 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001021#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001022#if defined(MBEDTLS_CIPHER_MODE_XTS)
1023 NULL,
1024#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001025#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001026 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001027#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001028 gcm_camellia_setkey_wrap,
1029 gcm_camellia_setkey_wrap,
1030 gcm_ctx_alloc,
1031 gcm_ctx_free,
1032};
1033
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001034static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001035 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001036 16,
1037 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001038 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001039 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001040 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001041 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001042 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001043};
1044
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001045static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001046 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001047 16,
1048 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001049 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001050 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001051 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001052 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001053 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001054};
1055
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001056static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001057 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001058 16,
1059 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001060 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001061 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001062 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001063 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001064 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001065};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001066#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001067
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001068#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001069static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1070 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001071{
Gilles Peskine449bd832023-01-11 14:50:10 +01001072 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1073 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001074}
1075
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001076static const mbedtls_cipher_base_t ccm_camellia_info = {
1077 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001078 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001079#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001080 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001081#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001082#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001083 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001084#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001085#if defined(MBEDTLS_CIPHER_MODE_OFB)
1086 NULL,
1087#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001088#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001089 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001090#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001091#if defined(MBEDTLS_CIPHER_MODE_XTS)
1092 NULL,
1093#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001094#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001095 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001096#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001097 ccm_camellia_setkey_wrap,
1098 ccm_camellia_setkey_wrap,
1099 ccm_ctx_alloc,
1100 ccm_ctx_free,
1101};
1102
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001103static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001104 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001105 16,
1106 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001107 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001108 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001109 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001110 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001111 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001112};
1113
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001114static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001115 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001116 16,
1117 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001118 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001119 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001120 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001121 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001122 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001123};
1124
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001125static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001126 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001127 16,
1128 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001129 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001130 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001131 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001132 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001133 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001134};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001135
1136static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001137 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001138 16,
1139 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001140 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001141 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001142 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001143 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001144 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001145};
1146
1147static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001148 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001149 16,
1150 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001151 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001152 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001153 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001154 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001155 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001156};
1157
1158static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001159 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001160 16,
1161 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001162 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001163 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001164 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001165 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001166 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001167};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001168#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001169
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001170#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001171
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001172#if defined(MBEDTLS_ARIA_C)
1173
Gilles Peskine449bd832023-01-11 14:50:10 +01001174static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1175 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001176{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001177 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001178 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1179 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001180}
1181
1182#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001183static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1184 size_t length, unsigned char *iv,
1185 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001186{
Gilles Peskine449bd832023-01-11 14:50:10 +01001187 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1188 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001189}
1190#endif /* MBEDTLS_CIPHER_MODE_CBC */
1191
1192#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001193static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1194 size_t length, size_t *iv_off, unsigned char *iv,
1195 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001196{
Gilles Peskine449bd832023-01-11 14:50:10 +01001197 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1198 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001199}
1200#endif /* MBEDTLS_CIPHER_MODE_CFB */
1201
1202#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001203static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1204 unsigned char *nonce_counter, unsigned char *stream_block,
1205 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001206{
Gilles Peskine449bd832023-01-11 14:50:10 +01001207 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1208 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001209}
1210#endif /* MBEDTLS_CIPHER_MODE_CTR */
1211
Gilles Peskine449bd832023-01-11 14:50:10 +01001212static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1213 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001214{
Gilles Peskine449bd832023-01-11 14:50:10 +01001215 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001216}
1217
Gilles Peskine449bd832023-01-11 14:50:10 +01001218static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1219 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001220{
Gilles Peskine449bd832023-01-11 14:50:10 +01001221 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001222}
1223
Gilles Peskine449bd832023-01-11 14:50:10 +01001224static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001225{
1226 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001227 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001228
Gilles Peskine449bd832023-01-11 14:50:10 +01001229 if (ctx == NULL) {
1230 return NULL;
1231 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001232
Gilles Peskine449bd832023-01-11 14:50:10 +01001233 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001234
Gilles Peskine449bd832023-01-11 14:50:10 +01001235 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001236}
1237
Gilles Peskine449bd832023-01-11 14:50:10 +01001238static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001239{
Gilles Peskine449bd832023-01-11 14:50:10 +01001240 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1241 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001242}
1243
1244static const mbedtls_cipher_base_t aria_info = {
1245 MBEDTLS_CIPHER_ID_ARIA,
1246 aria_crypt_ecb_wrap,
1247#if defined(MBEDTLS_CIPHER_MODE_CBC)
1248 aria_crypt_cbc_wrap,
1249#endif
1250#if defined(MBEDTLS_CIPHER_MODE_CFB)
1251 aria_crypt_cfb128_wrap,
1252#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001253#if defined(MBEDTLS_CIPHER_MODE_OFB)
1254 NULL,
1255#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001256#if defined(MBEDTLS_CIPHER_MODE_CTR)
1257 aria_crypt_ctr_wrap,
1258#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001259#if defined(MBEDTLS_CIPHER_MODE_XTS)
1260 NULL,
1261#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001262#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1263 NULL,
1264#endif
1265 aria_setkey_enc_wrap,
1266 aria_setkey_dec_wrap,
1267 aria_ctx_alloc,
1268 aria_ctx_free
1269};
1270
1271static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001272 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001273 16,
1274 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001275 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001276 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001277 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001278 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001279 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001280};
1281
1282static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001283 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001284 16,
1285 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001286 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001287 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001288 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001289 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001290 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001291};
1292
1293static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001294 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001295 16,
1296 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001297 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001298 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001299 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001300 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001301 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001302};
1303
1304#if defined(MBEDTLS_CIPHER_MODE_CBC)
1305static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001306 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001307 16,
1308 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001309 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001310 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001311 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001312 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001313 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001314};
1315
1316static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001317 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001318 16,
1319 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001320 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001321 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001322 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001323 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001324 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001325};
1326
1327static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001328 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001329 16,
1330 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001331 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001332 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001333 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001334 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001335 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001336};
1337#endif /* MBEDTLS_CIPHER_MODE_CBC */
1338
1339#if defined(MBEDTLS_CIPHER_MODE_CFB)
1340static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001341 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001342 16,
1343 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001344 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001345 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001346 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001347 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001348 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001349};
1350
1351static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001352 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001353 16,
1354 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001355 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001356 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001357 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001358 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001359 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001360};
1361
1362static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001363 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001364 16,
1365 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001366 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001367 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001368 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001369 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001370 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001371};
1372#endif /* MBEDTLS_CIPHER_MODE_CFB */
1373
1374#if defined(MBEDTLS_CIPHER_MODE_CTR)
1375static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001376 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001377 16,
1378 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001379 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001380 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001381 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001382 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001383 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001384};
1385
1386static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001387 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001388 16,
1389 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001390 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001391 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001392 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001393 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001394 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001395};
1396
1397static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001398 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001399 16,
1400 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001401 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001402 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001403 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001404 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001405 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001406};
1407#endif /* MBEDTLS_CIPHER_MODE_CTR */
1408
1409#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001410static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1411 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001412{
Gilles Peskine449bd832023-01-11 14:50:10 +01001413 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1414 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001415}
1416
1417static const mbedtls_cipher_base_t gcm_aria_info = {
1418 MBEDTLS_CIPHER_ID_ARIA,
1419 NULL,
1420#if defined(MBEDTLS_CIPHER_MODE_CBC)
1421 NULL,
1422#endif
1423#if defined(MBEDTLS_CIPHER_MODE_CFB)
1424 NULL,
1425#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001426#if defined(MBEDTLS_CIPHER_MODE_OFB)
1427 NULL,
1428#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001429#if defined(MBEDTLS_CIPHER_MODE_CTR)
1430 NULL,
1431#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001432#if defined(MBEDTLS_CIPHER_MODE_XTS)
1433 NULL,
1434#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001435#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1436 NULL,
1437#endif
1438 gcm_aria_setkey_wrap,
1439 gcm_aria_setkey_wrap,
1440 gcm_ctx_alloc,
1441 gcm_ctx_free,
1442};
1443
1444static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001445 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001446 16,
1447 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001448 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001449 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001450 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001451 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001452 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001453};
1454
1455static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001456 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001457 16,
1458 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001459 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001460 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001461 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001462 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001463 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001464};
1465
1466static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001467 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001468 16,
1469 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001470 256 >> 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_256_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#endif /* MBEDTLS_GCM_C */
1477
1478#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001479static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1480 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001481{
Gilles Peskine449bd832023-01-11 14:50:10 +01001482 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1483 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001484}
1485
1486static const mbedtls_cipher_base_t ccm_aria_info = {
1487 MBEDTLS_CIPHER_ID_ARIA,
1488 NULL,
1489#if defined(MBEDTLS_CIPHER_MODE_CBC)
1490 NULL,
1491#endif
1492#if defined(MBEDTLS_CIPHER_MODE_CFB)
1493 NULL,
1494#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001495#if defined(MBEDTLS_CIPHER_MODE_OFB)
1496 NULL,
1497#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001498#if defined(MBEDTLS_CIPHER_MODE_CTR)
1499 NULL,
1500#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001501#if defined(MBEDTLS_CIPHER_MODE_XTS)
1502 NULL,
1503#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001504#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1505 NULL,
1506#endif
1507 ccm_aria_setkey_wrap,
1508 ccm_aria_setkey_wrap,
1509 ccm_ctx_alloc,
1510 ccm_ctx_free,
1511};
1512
1513static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001514 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001515 16,
1516 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001517 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001518 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001519 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001520 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001521 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001522};
1523
1524static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001525 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001526 16,
1527 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001528 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001529 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001530 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001531 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001532 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001533};
1534
1535static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001536 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001537 16,
1538 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001539 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001540 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001541 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001542 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001543 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001544};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001545
1546static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001547 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001548 16,
1549 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001550 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001551 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001552 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001553 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001554 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001555};
1556
1557static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001558 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001559 16,
1560 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001561 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001562 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001563 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001564 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001565 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001566};
1567
1568static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001569 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001570 16,
1571 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001572 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001573 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001574 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001575 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001576 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001577};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001578#endif /* MBEDTLS_CCM_C */
1579
1580#endif /* MBEDTLS_ARIA_C */
1581
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001582#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001583
Gilles Peskine449bd832023-01-11 14:50:10 +01001584static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1585 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001586{
1587 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001588 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001589}
1590
Gilles Peskine449bd832023-01-11 14:50:10 +01001591static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1592 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001593{
1594 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001595 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001596}
1597
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001598#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001599static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1600 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001601{
Gilles Peskine449bd832023-01-11 14:50:10 +01001602 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1603 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001604}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001605#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001606
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001607#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001608static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1609 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001610{
Gilles Peskine449bd832023-01-11 14:50:10 +01001611 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1612 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001613}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001614#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001615
Gilles Peskine449bd832023-01-11 14:50:10 +01001616static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1617 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001618{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001619 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001620
Gilles Peskine449bd832023-01-11 14:50:10 +01001621 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001622}
1623
Gilles Peskine449bd832023-01-11 14:50:10 +01001624static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1625 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001626{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001627 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001628
Gilles Peskine449bd832023-01-11 14:50:10 +01001629 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001630}
1631
Gilles Peskine449bd832023-01-11 14:50:10 +01001632static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1633 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001634{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001635 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001636
Gilles Peskine449bd832023-01-11 14:50:10 +01001637 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001638}
1639
Gilles Peskine449bd832023-01-11 14:50:10 +01001640static int des3_set2key_enc_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_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001646}
1647
Gilles Peskine449bd832023-01-11 14:50:10 +01001648static int des3_set3key_dec_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_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001654}
1655
Gilles Peskine449bd832023-01-11 14:50:10 +01001656static int des3_set3key_enc_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_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001662}
1663
Gilles Peskine449bd832023-01-11 14:50:10 +01001664static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001665{
Gilles Peskine449bd832023-01-11 14:50:10 +01001666 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001667
Gilles Peskine449bd832023-01-11 14:50:10 +01001668 if (des == NULL) {
1669 return NULL;
1670 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001671
Gilles Peskine449bd832023-01-11 14:50:10 +01001672 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001673
Gilles Peskine449bd832023-01-11 14:50:10 +01001674 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001675}
1676
Gilles Peskine449bd832023-01-11 14:50:10 +01001677static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001678{
Gilles Peskine449bd832023-01-11 14:50:10 +01001679 mbedtls_des_free((mbedtls_des_context *) ctx);
1680 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001681}
1682
Gilles Peskine449bd832023-01-11 14:50:10 +01001683static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001684{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001685 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001686 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001687
Gilles Peskine449bd832023-01-11 14:50:10 +01001688 if (des3 == NULL) {
1689 return NULL;
1690 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001691
Gilles Peskine449bd832023-01-11 14:50:10 +01001692 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001693
Gilles Peskine449bd832023-01-11 14:50:10 +01001694 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001695}
1696
Gilles Peskine449bd832023-01-11 14:50:10 +01001697static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001698{
Gilles Peskine449bd832023-01-11 14:50:10 +01001699 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1700 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001701}
1702
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001703static const mbedtls_cipher_base_t des_info = {
1704 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001705 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001706#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001707 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001708#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001709#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001710 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001711#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001712#if defined(MBEDTLS_CIPHER_MODE_OFB)
1713 NULL,
1714#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001715#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001716 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001717#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001718#if defined(MBEDTLS_CIPHER_MODE_XTS)
1719 NULL,
1720#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001721#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001722 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001723#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001724 des_setkey_enc_wrap,
1725 des_setkey_dec_wrap,
1726 des_ctx_alloc,
1727 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001728};
1729
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001730static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001731 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001732 8,
1733 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001734 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001735 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001736 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001737 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001738 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001739};
1740
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001741#if defined(MBEDTLS_CIPHER_MODE_CBC)
1742static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001743 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001744 8,
1745 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001746 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001747 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001748 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001749 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001750 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001751};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001752#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001753
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001754static const mbedtls_cipher_base_t des_ede_info = {
1755 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001756 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001757#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001758 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001759#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001760#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001761 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001762#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001763#if defined(MBEDTLS_CIPHER_MODE_OFB)
1764 NULL,
1765#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001766#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001767 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001768#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001769#if defined(MBEDTLS_CIPHER_MODE_XTS)
1770 NULL,
1771#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001772#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001773 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001774#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001775 des3_set2key_enc_wrap,
1776 des3_set2key_dec_wrap,
1777 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001778 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001779};
1780
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001781static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001782 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001783 8,
1784 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001785 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001786 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001787 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001788 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001789 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001790};
1791
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001792#if defined(MBEDTLS_CIPHER_MODE_CBC)
1793static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001794 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001795 8,
1796 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001797 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001798 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001799 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001800 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001801 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001802};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001803#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001804
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001805static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001806 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001807 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001808#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001809 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001810#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001811#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001812 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001813#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001814#if defined(MBEDTLS_CIPHER_MODE_OFB)
1815 NULL,
1816#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001817#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001818 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001819#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001820#if defined(MBEDTLS_CIPHER_MODE_XTS)
1821 NULL,
1822#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001823#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001824 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001825#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001826 des3_set3key_enc_wrap,
1827 des3_set3key_dec_wrap,
1828 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001829 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001830};
1831
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001832static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001833 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001834 8,
1835 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001836 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001837 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001838 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001839 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001840 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001841};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001842#if defined(MBEDTLS_CIPHER_MODE_CBC)
1843static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001844 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001845 8,
1846 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001847 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001848 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001849 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001850 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001851 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001852};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001853#endif /* MBEDTLS_CIPHER_MODE_CBC */
1854#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001855
Daniel Kingbd920622016-05-15 19:56:20 -03001856#if defined(MBEDTLS_CHACHA20_C)
1857
Gilles Peskine449bd832023-01-11 14:50:10 +01001858static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1859 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001860{
Gilles Peskine449bd832023-01-11 14:50:10 +01001861 if (key_bitlen != 256U) {
1862 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1863 }
Daniel Kingbd920622016-05-15 19:56:20 -03001864
Gilles Peskine449bd832023-01-11 14:50:10 +01001865 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1866 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1867 }
Daniel Kingbd920622016-05-15 19:56:20 -03001868
Gilles Peskine449bd832023-01-11 14:50:10 +01001869 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001870}
1871
Gilles Peskine449bd832023-01-11 14:50:10 +01001872static int chacha20_stream_wrap(void *ctx, size_t length,
1873 const unsigned char *input,
1874 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001875{
Janos Follath24eed8d2019-11-22 13:21:35 +00001876 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001877
Gilles Peskine449bd832023-01-11 14:50:10 +01001878 ret = mbedtls_chacha20_update(ctx, length, input, output);
1879 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1880 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1881 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001882
Gilles Peskine449bd832023-01-11 14:50:10 +01001883 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001884}
1885
Gilles Peskine449bd832023-01-11 14:50:10 +01001886static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001887{
1888 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001889 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001890
Gilles Peskine449bd832023-01-11 14:50:10 +01001891 if (ctx == NULL) {
1892 return NULL;
1893 }
Daniel Kingbd920622016-05-15 19:56:20 -03001894
Gilles Peskine449bd832023-01-11 14:50:10 +01001895 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001896
Gilles Peskine449bd832023-01-11 14:50:10 +01001897 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001898}
1899
Gilles Peskine449bd832023-01-11 14:50:10 +01001900static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001901{
Gilles Peskine449bd832023-01-11 14:50:10 +01001902 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1903 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001904}
1905
1906static const mbedtls_cipher_base_t chacha20_base_info = {
1907 MBEDTLS_CIPHER_ID_CHACHA20,
1908 NULL,
1909#if defined(MBEDTLS_CIPHER_MODE_CBC)
1910 NULL,
1911#endif
1912#if defined(MBEDTLS_CIPHER_MODE_CFB)
1913 NULL,
1914#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001915#if defined(MBEDTLS_CIPHER_MODE_OFB)
1916 NULL,
1917#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001918#if defined(MBEDTLS_CIPHER_MODE_CTR)
1919 NULL,
1920#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001921#if defined(MBEDTLS_CIPHER_MODE_XTS)
1922 NULL,
1923#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001924#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001925 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001926#endif
1927 chacha20_setkey_wrap,
1928 chacha20_setkey_wrap,
1929 chacha20_ctx_alloc,
1930 chacha20_ctx_free
1931};
1932static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001933 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001934 1,
1935 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001936 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001937 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001938 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001939 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001940 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001941};
1942#endif /* MBEDTLS_CHACHA20_C */
1943
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001944#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001945
Gilles Peskine449bd832023-01-11 14:50:10 +01001946static int chachapoly_setkey_wrap(void *ctx,
1947 const unsigned char *key,
1948 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001949{
Gilles Peskine449bd832023-01-11 14:50:10 +01001950 if (key_bitlen != 256U) {
1951 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1952 }
Daniel King8fe47012016-05-17 20:33:28 -03001953
Gilles Peskine449bd832023-01-11 14:50:10 +01001954 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1955 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1956 }
Daniel King8fe47012016-05-17 20:33:28 -03001957
Gilles Peskine449bd832023-01-11 14:50:10 +01001958 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001959}
1960
Gilles Peskine449bd832023-01-11 14:50:10 +01001961static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001962{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001963 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001964 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001965
Gilles Peskine449bd832023-01-11 14:50:10 +01001966 if (ctx == NULL) {
1967 return NULL;
1968 }
Daniel King8fe47012016-05-17 20:33:28 -03001969
Gilles Peskine449bd832023-01-11 14:50:10 +01001970 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001971
Gilles Peskine449bd832023-01-11 14:50:10 +01001972 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001973}
1974
Gilles Peskine449bd832023-01-11 14:50:10 +01001975static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001976{
Gilles Peskine449bd832023-01-11 14:50:10 +01001977 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1978 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001979}
1980
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001981static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001982 MBEDTLS_CIPHER_ID_CHACHA20,
1983 NULL,
1984#if defined(MBEDTLS_CIPHER_MODE_CBC)
1985 NULL,
1986#endif
1987#if defined(MBEDTLS_CIPHER_MODE_CFB)
1988 NULL,
1989#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001990#if defined(MBEDTLS_CIPHER_MODE_OFB)
1991 NULL,
1992#endif
Daniel King8fe47012016-05-17 20:33:28 -03001993#if defined(MBEDTLS_CIPHER_MODE_CTR)
1994 NULL,
1995#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001996#if defined(MBEDTLS_CIPHER_MODE_XTS)
1997 NULL,
1998#endif
Daniel King8fe47012016-05-17 20:33:28 -03001999#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2000 NULL,
2001#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002002 chachapoly_setkey_wrap,
2003 chachapoly_setkey_wrap,
2004 chachapoly_ctx_alloc,
2005 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002006};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002007static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002008 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002009 1,
2010 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002011 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002012 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002013 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002014 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002015 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002016};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002017#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002018
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002019#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002020static int null_crypt_stream(void *ctx, size_t length,
2021 const unsigned char *input,
2022 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002023{
2024 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002025 memmove(output, input, length);
2026 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002027}
2028
Gilles Peskine449bd832023-01-11 14:50:10 +01002029static int null_setkey(void *ctx, const unsigned char *key,
2030 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002031{
2032 ((void) ctx);
2033 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002034 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002035
Gilles Peskine449bd832023-01-11 14:50:10 +01002036 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002037}
2038
Gilles Peskine449bd832023-01-11 14:50:10 +01002039static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002040{
Gilles Peskine449bd832023-01-11 14:50:10 +01002041 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002042}
2043
Gilles Peskine449bd832023-01-11 14:50:10 +01002044static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002045{
2046 ((void) ctx);
2047}
2048
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002049static const mbedtls_cipher_base_t null_base_info = {
2050 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002051 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002052#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002053 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002054#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002055#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002056 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002057#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002058#if defined(MBEDTLS_CIPHER_MODE_OFB)
2059 NULL,
2060#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002061#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002062 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002063#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002064#if defined(MBEDTLS_CIPHER_MODE_XTS)
2065 NULL,
2066#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002067#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002068 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002069#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002070 null_setkey,
2071 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002072 null_ctx_alloc,
2073 null_ctx_free
2074};
2075
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002076static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002077 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002078 1,
2079 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002080 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002081 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002082 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002083 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002084 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002085};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002086#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002087
Jack Lloydffdf2882019-03-07 17:00:32 -05002088#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002089static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002090{
Gilles Peskine449bd832023-01-11 14:50:10 +01002091 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002092
Gilles Peskine449bd832023-01-11 14:50:10 +01002093 if (ctx != NULL) {
2094 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2095 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002096
Gilles Peskine449bd832023-01-11 14:50:10 +01002097 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002098}
2099
Gilles Peskine449bd832023-01-11 14:50:10 +01002100static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002101{
Gilles Peskine449bd832023-01-11 14:50:10 +01002102 mbedtls_nist_kw_free(ctx);
2103 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002104}
2105
Gilles Peskine449bd832023-01-11 14:50:10 +01002106static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2107 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002108{
Gilles Peskine449bd832023-01-11 14:50:10 +01002109 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2110 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002111}
2112
Gilles Peskine449bd832023-01-11 14:50:10 +01002113static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2114 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002115{
Gilles Peskine449bd832023-01-11 14:50:10 +01002116 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2117 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002118}
2119
2120static const mbedtls_cipher_base_t kw_aes_info = {
2121 MBEDTLS_CIPHER_ID_AES,
2122 NULL,
2123#if defined(MBEDTLS_CIPHER_MODE_CBC)
2124 NULL,
2125#endif
2126#if defined(MBEDTLS_CIPHER_MODE_CFB)
2127 NULL,
2128#endif
2129#if defined(MBEDTLS_CIPHER_MODE_OFB)
2130 NULL,
2131#endif
2132#if defined(MBEDTLS_CIPHER_MODE_CTR)
2133 NULL,
2134#endif
2135#if defined(MBEDTLS_CIPHER_MODE_XTS)
2136 NULL,
2137#endif
2138#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2139 NULL,
2140#endif
2141 kw_aes_setkey_wrap,
2142 kw_aes_setkey_unwrap,
2143 kw_ctx_alloc,
2144 kw_ctx_free,
2145};
2146
2147static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002148 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002149 16,
2150 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002151 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002152 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002153 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002154 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002155 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002156};
2157
Yanray Wang7732ced2023-09-14 13:51:14 +08002158#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002159static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002160 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002161 16,
2162 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002163 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002164 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002165 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002166 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002167 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002168};
2169
2170static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002171 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002172 16,
2173 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002174 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002175 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002176 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002177 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002178 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002179};
Yanray Wang7732ced2023-09-14 13:51:14 +08002180#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002181
2182static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002183 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002184 16,
2185 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002186 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002187 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002188 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002189 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002190 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002191};
2192
Yanray Wang7732ced2023-09-14 13:51:14 +08002193#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002194static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002195 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002196 16,
2197 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002198 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002199 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002200 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002201 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002202 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002203};
2204
2205static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002206 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002207 16,
2208 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002209 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002210 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002211 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002212 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002213 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002214};
Yanray Wang7732ced2023-09-14 13:51:14 +08002215#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002216#endif /* MBEDTLS_NIST_KW_C */
2217
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002218const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002219{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002220#if defined(MBEDTLS_AES_C)
2221 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002222#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002223 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2224 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002225#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002226#if defined(MBEDTLS_CIPHER_MODE_CBC)
2227 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002228#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002229 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2230 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002231#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002232#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002233#if defined(MBEDTLS_CIPHER_MODE_CFB)
2234 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002235#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002236 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2237 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002238#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002239#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002240#if defined(MBEDTLS_CIPHER_MODE_OFB)
2241 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002242#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002243 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2244 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2245#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002246#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002247#if defined(MBEDTLS_CIPHER_MODE_CTR)
2248 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002249#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002250 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2251 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002252#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002253#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002254#if defined(MBEDTLS_CIPHER_MODE_XTS)
2255 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002256#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002257 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2258#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002259#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002260#endif /* MBEDTLS_AES_C */
2261#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002262 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002263#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002264 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2265 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002266#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002267#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002268#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002269 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002270#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002271 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2272 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002273#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002274#endif
Valerio Settia6c07612023-10-12 18:48:24 +02002275#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002276 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002277#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002278 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2279 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002280#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002281#endif
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002282
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002283#if defined(MBEDTLS_CAMELLIA_C)
2284 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2285 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2286 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2287#if defined(MBEDTLS_CIPHER_MODE_CBC)
2288 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2289 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2290 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002291#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002292#if defined(MBEDTLS_CIPHER_MODE_CFB)
2293 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2294 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2295 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002296#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002297#if defined(MBEDTLS_CIPHER_MODE_CTR)
2298 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2299 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2300 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002301#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002302#if defined(MBEDTLS_GCM_C)
2303 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2304 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2305 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002306#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002307#if defined(MBEDTLS_CCM_C)
2308 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2309 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2310 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002311 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2312 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2313 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002314#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002315#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002316
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002317#if defined(MBEDTLS_ARIA_C)
2318 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2319 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2320 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2321#if defined(MBEDTLS_CIPHER_MODE_CBC)
2322 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2323 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2324 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2325#endif
2326#if defined(MBEDTLS_CIPHER_MODE_CFB)
2327 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2328 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2329 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2330#endif
2331#if defined(MBEDTLS_CIPHER_MODE_CTR)
2332 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2333 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2334 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2335#endif
2336#if defined(MBEDTLS_GCM_C)
2337 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2338 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2339 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2340#endif
2341#if defined(MBEDTLS_CCM_C)
2342 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2343 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2344 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002345 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2346 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2347 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002348#endif
2349#endif /* MBEDTLS_ARIA_C */
2350
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002351#if defined(MBEDTLS_DES_C)
2352 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2353 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2354 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2355#if defined(MBEDTLS_CIPHER_MODE_CBC)
2356 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2357 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2358 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002359#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002360#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002361
Daniel Kingbd920622016-05-15 19:56:20 -03002362#if defined(MBEDTLS_CHACHA20_C)
2363 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2364#endif
2365
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002366#if defined(MBEDTLS_CHACHAPOLY_C)
2367 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002368#endif
2369
Jack Lloydffdf2882019-03-07 17:00:32 -05002370#if defined(MBEDTLS_NIST_KW_C)
2371 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002372#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002373 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2374 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002375#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002376 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002377#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002378 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2379 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2380#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002381#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002382
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002383#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2384 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2385#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002386
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002387 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002388};
2389
Gilles Peskine449bd832023-01-11 14:50:10 +01002390#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2391 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002392int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002393
Dave Rodgman3b46b772023-06-24 13:25:06 +01002394const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002395#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002396 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002397#endif
2398#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002399 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002400#endif
2401#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002402 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002403#endif
Valerio Settidcee9872023-10-16 11:35:57 +02002404#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002405 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002406#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002407#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002408 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002409#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002410#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002411 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002412#endif
2413#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002414 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002415#endif
2416#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002417 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002418#endif
2419#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002420 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002421#endif
2422#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002423 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002424#endif
2425#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002426 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002427#endif
Valerio Settidcee9872023-10-16 11:35:57 +02002428#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002429 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002430#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002431#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002432 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002433#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002434#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002435 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002436#endif
2437#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002438 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002439#endif
2440#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002441 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002442#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002443#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002444 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002445#endif
2446};
2447
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002448#endif /* MBEDTLS_CIPHER_C */