blob: bbf57ceee7b629a1e7488c545689a6722c6f0c5e [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
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +02009 * SPDX-License-Identifier: Apache-2.0
10 *
11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
12 * not use this file except in compliance with the License.
13 * You may obtain a copy of the License at
14 *
15 * http://www.apache.org/licenses/LICENSE-2.0
16 *
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
Paul Bakker8123e9d2011-01-06 15:37:30 +000022 */
23
Gilles Peskinedb09ef62020-06-03 01:43:33 +020024#include "common.h"
Paul Bakker8123e9d2011-01-06 15:37:30 +000025
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020026#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000027
Chris Jonesdaacb592021-03-09 17:03:29 +000028#include "cipher_wrap.h"
Janos Follath24eed8d2019-11-22 13:21:35 +000029#include "mbedtls/error.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000030
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +020031#if defined(MBEDTLS_CHACHAPOLY_C)
32#include "mbedtls/chachapoly.h"
Daniel King8fe47012016-05-17 20:33:28 -030033#endif
34
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000036#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000037#endif
38
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020039#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000040#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000041#endif
42
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000043#if defined(MBEDTLS_ARIA_C)
44#include "mbedtls/aria.h"
45#endif
46
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000048#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000049#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000050
Daniel Kingbd920622016-05-15 19:56:20 -030051#if defined(MBEDTLS_CHACHA20_C)
52#include "mbedtls/chacha20.h"
53#endif
54
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000056#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020057#endif
58
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000060#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020061#endif
62
Jack Lloydffdf2882019-03-07 17:00:32 -050063#if defined(MBEDTLS_NIST_KW_C)
64#include "mbedtls/nist_kw.h"
65#endif
66
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000068#include <string.h>
69#endif
70
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000071#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020072
Dave Rodgman25d77cb2023-06-24 22:58:51 +010073enum mbedtls_cipher_base_index {
74#if defined(MBEDTLS_AES_C)
75 MBEDTLS_CIPHER_BASE_INDEX_AES,
76#endif
77#if defined(MBEDTLS_ARIA_C)
78 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
79#endif
80#if defined(MBEDTLS_CAMELLIA_C)
81 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
82#endif
83#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
84 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
85#endif
86#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
87 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
88#endif
89#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
90 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
91#endif
92#if defined(MBEDTLS_CHACHA20_C)
93 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
94#endif
95#if defined(MBEDTLS_CHACHAPOLY_C)
96 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
97#endif
98#if defined(MBEDTLS_DES_C)
99 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
100#endif
101#if defined(MBEDTLS_DES_C)
102 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
103#endif
104#if defined(MBEDTLS_DES_C)
105 MBEDTLS_CIPHER_BASE_INDEX_DES,
106#endif
107#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
108 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
109#endif
110#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
111 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
112#endif
113#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
114 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
115#endif
116#if defined(MBEDTLS_NIST_KW_C)
117 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
118#endif
119#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
120 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
121#endif
122#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100123 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100124#endif
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100125 /* Prevent compile failure due to empty enum */
Dave Rodgmane3330f82023-08-14 15:26:28 +0100126 MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100127};
Dave Rodgmande3de772023-06-24 12:51:06 +0100128
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200129#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200130/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100131static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200132{
Gilles Peskine449bd832023-01-11 14:50:10 +0100133 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200134
Gilles Peskine449bd832023-01-11 14:50:10 +0100135 if (ctx != NULL) {
136 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
137 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200138
Gilles Peskine449bd832023-01-11 14:50:10 +0100139 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200140}
141
Gilles Peskine449bd832023-01-11 14:50:10 +0100142static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200143{
Gilles Peskine449bd832023-01-11 14:50:10 +0100144 mbedtls_gcm_free(ctx);
145 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200146}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200147#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200148
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200149#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200150/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100151static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200152{
Gilles Peskine449bd832023-01-11 14:50:10 +0100153 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200154
Gilles Peskine449bd832023-01-11 14:50:10 +0100155 if (ctx != NULL) {
156 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
157 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200158
Gilles Peskine449bd832023-01-11 14:50:10 +0100159 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200160}
161
Gilles Peskine449bd832023-01-11 14:50:10 +0100162static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200163{
Gilles Peskine449bd832023-01-11 14:50:10 +0100164 mbedtls_ccm_free(ctx);
165 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200166}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200167#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200168
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200169#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000170
Gilles Peskine449bd832023-01-11 14:50:10 +0100171static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
172 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200173{
Gilles Peskine449bd832023-01-11 14:50:10 +0100174 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200175}
176
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200177#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100178static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
179 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000180{
Gilles Peskine449bd832023-01-11 14:50:10 +0100181 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
182 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000183}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200184#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000185
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200186#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100187static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
188 size_t length, size_t *iv_off, unsigned char *iv,
189 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000190{
Gilles Peskine449bd832023-01-11 14:50:10 +0100191 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
192 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000193}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200194#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000195
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100196#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100197static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
198 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100199{
Gilles Peskine449bd832023-01-11 14:50:10 +0100200 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
201 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100202}
203#endif /* MBEDTLS_CIPHER_MODE_OFB */
204
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200205#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100206static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
207 unsigned char *nonce_counter, unsigned char *stream_block,
208 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000209{
Gilles Peskine449bd832023-01-11 14:50:10 +0100210 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
211 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000212}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200213#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000214
Jaeden Ameroc6539902018-04-30 17:17:41 +0100215#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100216static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
217 size_t length,
218 const unsigned char data_unit[16],
219 const unsigned char *input,
220 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100221{
222 mbedtls_aes_xts_context *xts_ctx = ctx;
223 int mode;
224
Gilles Peskine449bd832023-01-11 14:50:10 +0100225 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100226 case MBEDTLS_ENCRYPT:
227 mode = MBEDTLS_AES_ENCRYPT;
228 break;
229 case MBEDTLS_DECRYPT:
230 mode = MBEDTLS_AES_DECRYPT;
231 break;
232 default:
233 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
234 }
235
Gilles Peskine449bd832023-01-11 14:50:10 +0100236 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
237 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100238}
239#endif /* MBEDTLS_CIPHER_MODE_XTS */
240
Gilles Peskine449bd832023-01-11 14:50:10 +0100241static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
242 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000243{
Gilles Peskine449bd832023-01-11 14:50:10 +0100244 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000245}
246
Gilles Peskine449bd832023-01-11 14:50:10 +0100247static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
248 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000249{
Gilles Peskine449bd832023-01-11 14:50:10 +0100250 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000251}
252
Gilles Peskine449bd832023-01-11 14:50:10 +0100253static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000254{
Gilles Peskine449bd832023-01-11 14:50:10 +0100255 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200256
Gilles Peskine449bd832023-01-11 14:50:10 +0100257 if (aes == NULL) {
258 return NULL;
259 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200260
Gilles Peskine449bd832023-01-11 14:50:10 +0100261 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200262
Gilles Peskine449bd832023-01-11 14:50:10 +0100263 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000264}
265
Gilles Peskine449bd832023-01-11 14:50:10 +0100266static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000267{
Gilles Peskine449bd832023-01-11 14:50:10 +0100268 mbedtls_aes_free((mbedtls_aes_context *) ctx);
269 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000270}
271
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200272static const mbedtls_cipher_base_t aes_info = {
273 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200274 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200275#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000276 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100277#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200278#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000279 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100280#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100281#if defined(MBEDTLS_CIPHER_MODE_OFB)
282 aes_crypt_ofb_wrap,
283#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200284#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000285 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100286#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100287#if defined(MBEDTLS_CIPHER_MODE_XTS)
288 NULL,
289#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200290#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200291 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100292#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000293 aes_setkey_enc_wrap,
294 aes_setkey_dec_wrap,
295 aes_ctx_alloc,
296 aes_ctx_free
297};
298
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200299static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100300 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100301 16,
302 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100303 128 >> 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_128_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
Yanray Wang7732ced2023-09-14 13:51:14 +0800310#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200311static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100312 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100313 16,
314 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100315 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100316 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100317 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200318 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100319 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200320};
321
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200322static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100323 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100324 16,
325 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100326 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100327 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100328 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200329 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100330 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200331};
Yanray Wang7732ced2023-09-14 13:51:14 +0800332#endif
Paul Bakker5e0efa72013-09-08 23:04:04 +0200333
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200334#if defined(MBEDTLS_CIPHER_MODE_CBC)
335static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100336 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100337 16,
338 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100339 128 >> 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_128_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
Yanray Wang7732ced2023-09-14 13:51:14 +0800346#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200347static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100348 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100349 16,
350 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100351 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100352 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100353 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200354 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100355 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000356};
357
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200358static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100359 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100360 16,
361 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100362 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100363 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100364 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200365 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100366 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000367};
Yanray Wang7732ced2023-09-14 13:51:14 +0800368#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200369#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000370
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200371#if defined(MBEDTLS_CIPHER_MODE_CFB)
372static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100373 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100374 16,
375 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100376 128 >> 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_128_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
Yanray Wang7732ced2023-09-14 13:51:14 +0800383#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200384static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100385 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100386 16,
387 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100388 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100389 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100390 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200391 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100392 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000393};
394
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200395static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100396 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100397 16,
398 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100399 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100400 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100401 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200402 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100403 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000404};
Yanray Wang7732ced2023-09-14 13:51:14 +0800405#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200406#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000407
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100408#if defined(MBEDTLS_CIPHER_MODE_OFB)
409static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100410 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100411 16,
412 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100413 128 >> 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_128_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
Yanray Wang7732ced2023-09-14 13:51:14 +0800420#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100421static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100422 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100423 16,
424 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100425 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100426 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100427 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100428 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100429 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100430};
431
432static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100433 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100434 16,
435 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100436 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100437 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100438 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100439 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100440 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100441};
Yanray Wang7732ced2023-09-14 13:51:14 +0800442#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100443#endif /* MBEDTLS_CIPHER_MODE_OFB */
444
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200445#if defined(MBEDTLS_CIPHER_MODE_CTR)
446static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100447 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100448 16,
449 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100450 128 >> 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_128_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
Yanray Wang7732ced2023-09-14 13:51:14 +0800457#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200458static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100459 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100460 16,
461 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100462 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100463 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100464 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200465 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100466 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000467};
468
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200469static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100470 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100471 16,
472 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100473 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100474 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100475 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200476 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100477 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000478};
Yanray Wang7732ced2023-09-14 13:51:14 +0800479#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200480#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000481
Jaeden Ameroc6539902018-04-30 17:17:41 +0100482#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100483static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
484 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100485{
486 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100487 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100488}
489
Gilles Peskine449bd832023-01-11 14:50:10 +0100490static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
491 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100492{
493 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100494 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100495}
496
Gilles Peskine449bd832023-01-11 14:50:10 +0100497static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100498{
Gilles Peskine449bd832023-01-11 14:50:10 +0100499 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100500
Gilles Peskine449bd832023-01-11 14:50:10 +0100501 if (xts_ctx != NULL) {
502 mbedtls_aes_xts_init(xts_ctx);
503 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100504
Gilles Peskine449bd832023-01-11 14:50:10 +0100505 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100506}
507
Gilles Peskine449bd832023-01-11 14:50:10 +0100508static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100509{
510 mbedtls_aes_xts_context *xts_ctx = ctx;
511
Gilles Peskine449bd832023-01-11 14:50:10 +0100512 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100513 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100514 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100515
Gilles Peskine449bd832023-01-11 14:50:10 +0100516 mbedtls_aes_xts_free(xts_ctx);
517 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100518}
519
520static const mbedtls_cipher_base_t xts_aes_info = {
521 MBEDTLS_CIPHER_ID_AES,
522 NULL,
523#if defined(MBEDTLS_CIPHER_MODE_CBC)
524 NULL,
525#endif
526#if defined(MBEDTLS_CIPHER_MODE_CFB)
527 NULL,
528#endif
529#if defined(MBEDTLS_CIPHER_MODE_OFB)
530 NULL,
531#endif
532#if defined(MBEDTLS_CIPHER_MODE_CTR)
533 NULL,
534#endif
535#if defined(MBEDTLS_CIPHER_MODE_XTS)
536 aes_crypt_xts_wrap,
537#endif
538#if defined(MBEDTLS_CIPHER_MODE_STREAM)
539 NULL,
540#endif
541 xts_aes_setkey_enc_wrap,
542 xts_aes_setkey_dec_wrap,
543 xts_aes_ctx_alloc,
544 xts_aes_ctx_free
545};
546
547static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100548 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100549 16,
550 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100551 256 >> 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_128_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};
557
Yanray Wang7732ced2023-09-14 13:51:14 +0800558#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100559static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100560 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100561 16,
562 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100563 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100564 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100565 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100566 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100567 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100568};
Yanray Wang7732ced2023-09-14 13:51:14 +0800569#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100570#endif /* MBEDTLS_CIPHER_MODE_XTS */
571
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200572#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100573static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
574 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200575{
Gilles Peskine449bd832023-01-11 14:50:10 +0100576 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
577 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200578}
579
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200580static const mbedtls_cipher_base_t gcm_aes_info = {
581 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200582 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200583#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200584 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100585#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200586#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200587 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100588#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100589#if defined(MBEDTLS_CIPHER_MODE_OFB)
590 NULL,
591#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200592#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200593 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100594#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100595#if defined(MBEDTLS_CIPHER_MODE_XTS)
596 NULL,
597#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200598#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200599 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100600#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200601 gcm_aes_setkey_wrap,
602 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200603 gcm_ctx_alloc,
604 gcm_ctx_free,
605};
606
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
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200641#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100642
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200643#if defined(MBEDTLS_CCM_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}
650
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200651static const mbedtls_cipher_base_t ccm_aes_info = {
652 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200653 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200654#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200655 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100656#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200657#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200658 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100659#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100660#if defined(MBEDTLS_CIPHER_MODE_OFB)
661 NULL,
662#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200663#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200664 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100665#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100666#if defined(MBEDTLS_CIPHER_MODE_XTS)
667 NULL,
668#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200669#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200670 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100671#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200672 ccm_aes_setkey_wrap,
673 ccm_aes_setkey_wrap,
674 ccm_ctx_alloc,
675 ccm_ctx_free,
676};
677
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200678static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100679 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100680 16,
681 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100682 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100683 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100684 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200685 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100686 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200687};
688
Yanray Wang7732ced2023-09-14 13:51:14 +0800689#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200690static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100691 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100692 16,
693 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100694 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100695 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100696 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200697 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100698 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200699};
700
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200701static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100702 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100703 16,
704 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100705 256 >> 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_256_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};
Yanray Wang7732ced2023-09-14 13:51:14 +0800711#endif
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200712
713static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100714 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100715 16,
716 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100717 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100718 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100719 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200720 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100721 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200722};
723
Yanray Wang7732ced2023-09-14 13:51:14 +0800724#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200725static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100726 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100727 16,
728 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100729 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100730 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100731 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200732 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100733 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200734};
735
736static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100737 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100738 16,
739 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100740 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100741 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100742 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200743 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100744 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200745};
Yanray Wang7732ced2023-09-14 13:51:14 +0800746#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200747#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200748
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200749#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000750
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200751#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000752
Gilles Peskine449bd832023-01-11 14:50:10 +0100753static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
754 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200755{
Gilles Peskine449bd832023-01-11 14:50:10 +0100756 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
757 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200758}
759
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200760#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100761static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
762 size_t length, unsigned char *iv,
763 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000764{
Gilles Peskine449bd832023-01-11 14:50:10 +0100765 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
766 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000767}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200768#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000769
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200770#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100771static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
772 size_t length, size_t *iv_off, unsigned char *iv,
773 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000774{
Gilles Peskine449bd832023-01-11 14:50:10 +0100775 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
776 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000777}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200778#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000779
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200780#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100781static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
782 unsigned char *nonce_counter, unsigned char *stream_block,
783 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000784{
Gilles Peskine449bd832023-01-11 14:50:10 +0100785 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
786 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000787}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200788#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000789
Gilles Peskine449bd832023-01-11 14:50:10 +0100790static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
791 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000792{
Gilles Peskine449bd832023-01-11 14:50:10 +0100793 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000794}
795
Gilles Peskine449bd832023-01-11 14:50:10 +0100796static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
797 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000798{
Gilles Peskine449bd832023-01-11 14:50:10 +0100799 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000800}
801
Gilles Peskine449bd832023-01-11 14:50:10 +0100802static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000803{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200804 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100805 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200806
Gilles Peskine449bd832023-01-11 14:50:10 +0100807 if (ctx == NULL) {
808 return NULL;
809 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200810
Gilles Peskine449bd832023-01-11 14:50:10 +0100811 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200812
Gilles Peskine449bd832023-01-11 14:50:10 +0100813 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000814}
815
Gilles Peskine449bd832023-01-11 14:50:10 +0100816static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000817{
Gilles Peskine449bd832023-01-11 14:50:10 +0100818 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
819 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000820}
821
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200822static const mbedtls_cipher_base_t camellia_info = {
823 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200824 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200825#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000826 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100827#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200828#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000829 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100830#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100831#if defined(MBEDTLS_CIPHER_MODE_OFB)
832 NULL,
833#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200834#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000835 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100836#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100837#if defined(MBEDTLS_CIPHER_MODE_XTS)
838 NULL,
839#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200840#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200841 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100842#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000843 camellia_setkey_enc_wrap,
844 camellia_setkey_dec_wrap,
845 camellia_ctx_alloc,
846 camellia_ctx_free
847};
848
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200849static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100850 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100851 16,
852 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100853 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100854 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100855 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200856 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100857 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200858};
859
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200860static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100861 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100862 16,
863 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100864 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100865 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100866 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200867 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100868 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200869};
870
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200871static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100872 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100873 16,
874 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100875 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100876 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100877 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200878 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100879 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200880};
881
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200882#if defined(MBEDTLS_CIPHER_MODE_CBC)
883static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100884 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100885 16,
886 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100887 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100888 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100889 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200890 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100891 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000892};
893
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200894static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100895 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100896 16,
897 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100898 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100899 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100900 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200901 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100902 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000903};
904
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200905static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100906 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100907 16,
908 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100909 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100910 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100911 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200912 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100913 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000914};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200915#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000916
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200917#if defined(MBEDTLS_CIPHER_MODE_CFB)
918static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100919 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100920 16,
921 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100922 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100923 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100924 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200925 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100926 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000927};
928
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200929static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100930 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100931 16,
932 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100933 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100934 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100935 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200936 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100937 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000938};
939
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200940static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100941 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100942 16,
943 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100944 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100945 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100946 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200947 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100948 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000949};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200950#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000951
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200952#if defined(MBEDTLS_CIPHER_MODE_CTR)
953static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100954 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100955 16,
956 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100957 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100958 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100959 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200960 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100961 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000962};
963
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200964static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100965 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100966 16,
967 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100968 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100969 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100970 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200971 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100972 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000973};
974
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200975static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100976 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100977 16,
978 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100979 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100980 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100981 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200982 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100983 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000984};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200985#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000986
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200987#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100988static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
989 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200990{
Gilles Peskine449bd832023-01-11 14:50:10 +0100991 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
992 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200993}
994
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200995static const mbedtls_cipher_base_t gcm_camellia_info = {
996 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200997 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200998#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200999 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001000#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001001#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001002 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001003#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001004#if defined(MBEDTLS_CIPHER_MODE_OFB)
1005 NULL,
1006#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001007#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001008 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001009#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001010#if defined(MBEDTLS_CIPHER_MODE_XTS)
1011 NULL,
1012#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001013#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001014 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001015#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001016 gcm_camellia_setkey_wrap,
1017 gcm_camellia_setkey_wrap,
1018 gcm_ctx_alloc,
1019 gcm_ctx_free,
1020};
1021
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001022static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001023 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001024 16,
1025 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001026 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001027 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001028 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001029 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001030 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001031};
1032
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001033static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001034 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001035 16,
1036 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001037 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001038 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001039 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001040 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001041 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001042};
1043
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001044static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001045 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001046 16,
1047 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001048 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001049 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001050 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001051 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001052 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001053};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001054#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001055
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001056#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001057static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1058 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001059{
Gilles Peskine449bd832023-01-11 14:50:10 +01001060 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1061 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001062}
1063
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001064static const mbedtls_cipher_base_t ccm_camellia_info = {
1065 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001066 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001067#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001068 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001069#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001070#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001071 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001072#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001073#if defined(MBEDTLS_CIPHER_MODE_OFB)
1074 NULL,
1075#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001076#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001077 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001078#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001079#if defined(MBEDTLS_CIPHER_MODE_XTS)
1080 NULL,
1081#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001082#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001083 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001084#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001085 ccm_camellia_setkey_wrap,
1086 ccm_camellia_setkey_wrap,
1087 ccm_ctx_alloc,
1088 ccm_ctx_free,
1089};
1090
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001091static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001092 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001093 16,
1094 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001095 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001096 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001097 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001098 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001099 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001100};
1101
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001102static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001103 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001104 16,
1105 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001106 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001107 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001108 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001109 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001110 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001111};
1112
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001113static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001114 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001115 16,
1116 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001117 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001118 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001119 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001120 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001121 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001122};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001123
1124static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001125 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001126 16,
1127 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001128 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001129 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001130 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001131 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001132 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001133};
1134
1135static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001136 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001137 16,
1138 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001139 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001140 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001141 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001142 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001143 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001144};
1145
1146static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001147 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001148 16,
1149 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001150 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001151 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001152 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001153 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001154 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001155};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001156#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001157
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001158#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001159
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001160#if defined(MBEDTLS_ARIA_C)
1161
Gilles Peskine449bd832023-01-11 14:50:10 +01001162static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1163 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001164{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001165 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001166 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1167 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001168}
1169
1170#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001171static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1172 size_t length, unsigned char *iv,
1173 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001174{
Gilles Peskine449bd832023-01-11 14:50:10 +01001175 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1176 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001177}
1178#endif /* MBEDTLS_CIPHER_MODE_CBC */
1179
1180#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001181static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1182 size_t length, size_t *iv_off, unsigned char *iv,
1183 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001184{
Gilles Peskine449bd832023-01-11 14:50:10 +01001185 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1186 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001187}
1188#endif /* MBEDTLS_CIPHER_MODE_CFB */
1189
1190#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001191static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1192 unsigned char *nonce_counter, unsigned char *stream_block,
1193 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001194{
Gilles Peskine449bd832023-01-11 14:50:10 +01001195 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1196 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001197}
1198#endif /* MBEDTLS_CIPHER_MODE_CTR */
1199
Gilles Peskine449bd832023-01-11 14:50:10 +01001200static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1201 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001202{
Gilles Peskine449bd832023-01-11 14:50:10 +01001203 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001204}
1205
Gilles Peskine449bd832023-01-11 14:50:10 +01001206static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1207 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001208{
Gilles Peskine449bd832023-01-11 14:50:10 +01001209 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001210}
1211
Gilles Peskine449bd832023-01-11 14:50:10 +01001212static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001213{
1214 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001215 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001216
Gilles Peskine449bd832023-01-11 14:50:10 +01001217 if (ctx == NULL) {
1218 return NULL;
1219 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001220
Gilles Peskine449bd832023-01-11 14:50:10 +01001221 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001222
Gilles Peskine449bd832023-01-11 14:50:10 +01001223 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001224}
1225
Gilles Peskine449bd832023-01-11 14:50:10 +01001226static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001227{
Gilles Peskine449bd832023-01-11 14:50:10 +01001228 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1229 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001230}
1231
1232static const mbedtls_cipher_base_t aria_info = {
1233 MBEDTLS_CIPHER_ID_ARIA,
1234 aria_crypt_ecb_wrap,
1235#if defined(MBEDTLS_CIPHER_MODE_CBC)
1236 aria_crypt_cbc_wrap,
1237#endif
1238#if defined(MBEDTLS_CIPHER_MODE_CFB)
1239 aria_crypt_cfb128_wrap,
1240#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001241#if defined(MBEDTLS_CIPHER_MODE_OFB)
1242 NULL,
1243#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001244#if defined(MBEDTLS_CIPHER_MODE_CTR)
1245 aria_crypt_ctr_wrap,
1246#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001247#if defined(MBEDTLS_CIPHER_MODE_XTS)
1248 NULL,
1249#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001250#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1251 NULL,
1252#endif
1253 aria_setkey_enc_wrap,
1254 aria_setkey_dec_wrap,
1255 aria_ctx_alloc,
1256 aria_ctx_free
1257};
1258
1259static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001260 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001261 16,
1262 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001263 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001264 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001265 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001266 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001267 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001268};
1269
1270static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001271 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001272 16,
1273 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001274 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001275 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001276 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001277 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001278 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001279};
1280
1281static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001282 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001283 16,
1284 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001285 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001286 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001287 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001288 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001289 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001290};
1291
1292#if defined(MBEDTLS_CIPHER_MODE_CBC)
1293static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001294 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001295 16,
1296 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001297 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001298 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001299 MBEDTLS_CIPHER_ARIA_128_CBC,
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
1304static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001305 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001306 16,
1307 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001308 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001309 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001310 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001311 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001312 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001313};
1314
1315static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001316 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001317 16,
1318 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001319 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001320 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001321 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001322 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001323 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001324};
1325#endif /* MBEDTLS_CIPHER_MODE_CBC */
1326
1327#if defined(MBEDTLS_CIPHER_MODE_CFB)
1328static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001329 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001330 16,
1331 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001332 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001333 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001334 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001335 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001336 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001337};
1338
1339static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001340 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001341 16,
1342 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001343 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001344 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001345 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001346 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001347 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001348};
1349
1350static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001351 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001352 16,
1353 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001354 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001355 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001356 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001357 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001358 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001359};
1360#endif /* MBEDTLS_CIPHER_MODE_CFB */
1361
1362#if defined(MBEDTLS_CIPHER_MODE_CTR)
1363static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001364 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001365 16,
1366 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001367 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001368 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001369 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001370 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001371 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001372};
1373
1374static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001375 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001376 16,
1377 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001378 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001379 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001380 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001381 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001382 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001383};
1384
1385static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001386 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001387 16,
1388 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001389 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001390 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001391 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001392 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001393 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001394};
1395#endif /* MBEDTLS_CIPHER_MODE_CTR */
1396
1397#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001398static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1399 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001400{
Gilles Peskine449bd832023-01-11 14:50:10 +01001401 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1402 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001403}
1404
1405static const mbedtls_cipher_base_t gcm_aria_info = {
1406 MBEDTLS_CIPHER_ID_ARIA,
1407 NULL,
1408#if defined(MBEDTLS_CIPHER_MODE_CBC)
1409 NULL,
1410#endif
1411#if defined(MBEDTLS_CIPHER_MODE_CFB)
1412 NULL,
1413#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001414#if defined(MBEDTLS_CIPHER_MODE_OFB)
1415 NULL,
1416#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001417#if defined(MBEDTLS_CIPHER_MODE_CTR)
1418 NULL,
1419#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001420#if defined(MBEDTLS_CIPHER_MODE_XTS)
1421 NULL,
1422#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001423#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1424 NULL,
1425#endif
1426 gcm_aria_setkey_wrap,
1427 gcm_aria_setkey_wrap,
1428 gcm_ctx_alloc,
1429 gcm_ctx_free,
1430};
1431
1432static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001433 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001434 16,
1435 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001436 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001437 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001438 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001439 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001440 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001441};
1442
1443static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001444 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001445 16,
1446 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001447 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001448 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001449 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001450 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001451 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001452};
1453
1454static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001455 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001456 16,
1457 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001458 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001459 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001460 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001461 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001462 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001463};
1464#endif /* MBEDTLS_GCM_C */
1465
1466#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001467static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1468 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001469{
Gilles Peskine449bd832023-01-11 14:50:10 +01001470 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1471 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001472}
1473
1474static const mbedtls_cipher_base_t ccm_aria_info = {
1475 MBEDTLS_CIPHER_ID_ARIA,
1476 NULL,
1477#if defined(MBEDTLS_CIPHER_MODE_CBC)
1478 NULL,
1479#endif
1480#if defined(MBEDTLS_CIPHER_MODE_CFB)
1481 NULL,
1482#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001483#if defined(MBEDTLS_CIPHER_MODE_OFB)
1484 NULL,
1485#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001486#if defined(MBEDTLS_CIPHER_MODE_CTR)
1487 NULL,
1488#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001489#if defined(MBEDTLS_CIPHER_MODE_XTS)
1490 NULL,
1491#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001492#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1493 NULL,
1494#endif
1495 ccm_aria_setkey_wrap,
1496 ccm_aria_setkey_wrap,
1497 ccm_ctx_alloc,
1498 ccm_ctx_free,
1499};
1500
1501static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001502 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001503 16,
1504 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001505 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001506 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001507 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001508 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001509 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001510};
1511
1512static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001513 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001514 16,
1515 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001516 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001517 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001518 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001519 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001520 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001521};
1522
1523static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001524 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001525 16,
1526 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001527 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001528 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001529 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001530 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001531 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001532};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001533
1534static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001535 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001536 16,
1537 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001538 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001539 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001540 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001541 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001542 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001543};
1544
1545static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001546 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001547 16,
1548 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001549 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001550 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001551 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001552 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001553 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001554};
1555
1556static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001557 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001558 16,
1559 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001560 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001561 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001562 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001563 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001564 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001565};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001566#endif /* MBEDTLS_CCM_C */
1567
1568#endif /* MBEDTLS_ARIA_C */
1569
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001570#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001571
Gilles Peskine449bd832023-01-11 14:50:10 +01001572static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1573 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001574{
1575 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001576 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001577}
1578
Gilles Peskine449bd832023-01-11 14:50:10 +01001579static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1580 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001581{
1582 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001583 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001584}
1585
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001586#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001587static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1588 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001589{
Gilles Peskine449bd832023-01-11 14:50:10 +01001590 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1591 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001592}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001593#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001594
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001595#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001596static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1597 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001598{
Gilles Peskine449bd832023-01-11 14:50:10 +01001599 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1600 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001601}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001602#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001603
Gilles Peskine449bd832023-01-11 14:50:10 +01001604static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1605 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001606{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001607 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001608
Gilles Peskine449bd832023-01-11 14:50:10 +01001609 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001610}
1611
Gilles Peskine449bd832023-01-11 14:50:10 +01001612static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1613 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001614{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001615 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001616
Gilles Peskine449bd832023-01-11 14:50:10 +01001617 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001618}
1619
Gilles Peskine449bd832023-01-11 14:50:10 +01001620static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1621 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001622{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001623 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001624
Gilles Peskine449bd832023-01-11 14:50:10 +01001625 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001626}
1627
Gilles Peskine449bd832023-01-11 14:50:10 +01001628static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1629 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001630{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001631 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001632
Gilles Peskine449bd832023-01-11 14:50:10 +01001633 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001634}
1635
Gilles Peskine449bd832023-01-11 14:50:10 +01001636static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1637 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001638{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001639 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001640
Gilles Peskine449bd832023-01-11 14:50:10 +01001641 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001642}
1643
Gilles Peskine449bd832023-01-11 14:50:10 +01001644static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1645 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001646{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001647 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001648
Gilles Peskine449bd832023-01-11 14:50:10 +01001649 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001650}
1651
Gilles Peskine449bd832023-01-11 14:50:10 +01001652static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001653{
Gilles Peskine449bd832023-01-11 14:50:10 +01001654 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001655
Gilles Peskine449bd832023-01-11 14:50:10 +01001656 if (des == NULL) {
1657 return NULL;
1658 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001659
Gilles Peskine449bd832023-01-11 14:50:10 +01001660 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001661
Gilles Peskine449bd832023-01-11 14:50:10 +01001662 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001663}
1664
Gilles Peskine449bd832023-01-11 14:50:10 +01001665static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001666{
Gilles Peskine449bd832023-01-11 14:50:10 +01001667 mbedtls_des_free((mbedtls_des_context *) ctx);
1668 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001669}
1670
Gilles Peskine449bd832023-01-11 14:50:10 +01001671static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001672{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001673 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001674 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001675
Gilles Peskine449bd832023-01-11 14:50:10 +01001676 if (des3 == NULL) {
1677 return NULL;
1678 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001679
Gilles Peskine449bd832023-01-11 14:50:10 +01001680 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001681
Gilles Peskine449bd832023-01-11 14:50:10 +01001682 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001683}
1684
Gilles Peskine449bd832023-01-11 14:50:10 +01001685static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001686{
Gilles Peskine449bd832023-01-11 14:50:10 +01001687 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1688 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001689}
1690
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001691static const mbedtls_cipher_base_t des_info = {
1692 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001693 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001694#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001695 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001696#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001697#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001698 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001699#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001700#if defined(MBEDTLS_CIPHER_MODE_OFB)
1701 NULL,
1702#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001703#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001704 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001705#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001706#if defined(MBEDTLS_CIPHER_MODE_XTS)
1707 NULL,
1708#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001709#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001710 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001711#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001712 des_setkey_enc_wrap,
1713 des_setkey_dec_wrap,
1714 des_ctx_alloc,
1715 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001716};
1717
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001718static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001719 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001720 8,
1721 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001722 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001723 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001724 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001725 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001726 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001727};
1728
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001729#if defined(MBEDTLS_CIPHER_MODE_CBC)
1730static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001731 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001732 8,
1733 8 >> 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_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001736 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001737 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001738 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001739};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001740#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001741
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001742static const mbedtls_cipher_base_t des_ede_info = {
1743 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001744 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001745#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001746 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001747#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001748#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001749 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001750#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001751#if defined(MBEDTLS_CIPHER_MODE_OFB)
1752 NULL,
1753#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001754#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001755 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001756#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001757#if defined(MBEDTLS_CIPHER_MODE_XTS)
1758 NULL,
1759#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001760#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001761 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001762#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001763 des3_set2key_enc_wrap,
1764 des3_set2key_dec_wrap,
1765 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001766 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001767};
1768
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001769static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001770 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001771 8,
1772 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001773 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001774 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001775 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001776 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001777 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001778};
1779
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001780#if defined(MBEDTLS_CIPHER_MODE_CBC)
1781static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001782 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001783 8,
1784 8 >> 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_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001787 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001788 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001789 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001790};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001791#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001792
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001793static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001794 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001795 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001796#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001797 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001798#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001799#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001800 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001801#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001802#if defined(MBEDTLS_CIPHER_MODE_OFB)
1803 NULL,
1804#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001805#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001806 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001807#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001808#if defined(MBEDTLS_CIPHER_MODE_XTS)
1809 NULL,
1810#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001811#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001812 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001813#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001814 des3_set3key_enc_wrap,
1815 des3_set3key_dec_wrap,
1816 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001817 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001818};
1819
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001820static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001821 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001822 8,
1823 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001824 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001825 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001826 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001827 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001828 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001829};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001830#if defined(MBEDTLS_CIPHER_MODE_CBC)
1831static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001832 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001833 8,
1834 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001835 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001836 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001837 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001838 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001839 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001840};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001841#endif /* MBEDTLS_CIPHER_MODE_CBC */
1842#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001843
Daniel Kingbd920622016-05-15 19:56:20 -03001844#if defined(MBEDTLS_CHACHA20_C)
1845
Gilles Peskine449bd832023-01-11 14:50:10 +01001846static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1847 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001848{
Gilles Peskine449bd832023-01-11 14:50:10 +01001849 if (key_bitlen != 256U) {
1850 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1851 }
Daniel Kingbd920622016-05-15 19:56:20 -03001852
Gilles Peskine449bd832023-01-11 14:50:10 +01001853 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1854 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1855 }
Daniel Kingbd920622016-05-15 19:56:20 -03001856
Gilles Peskine449bd832023-01-11 14:50:10 +01001857 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001858}
1859
Gilles Peskine449bd832023-01-11 14:50:10 +01001860static int chacha20_stream_wrap(void *ctx, size_t length,
1861 const unsigned char *input,
1862 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001863{
Janos Follath24eed8d2019-11-22 13:21:35 +00001864 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001865
Gilles Peskine449bd832023-01-11 14:50:10 +01001866 ret = mbedtls_chacha20_update(ctx, length, input, output);
1867 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1868 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1869 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001870
Gilles Peskine449bd832023-01-11 14:50:10 +01001871 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001872}
1873
Gilles Peskine449bd832023-01-11 14:50:10 +01001874static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001875{
1876 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001877 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001878
Gilles Peskine449bd832023-01-11 14:50:10 +01001879 if (ctx == NULL) {
1880 return NULL;
1881 }
Daniel Kingbd920622016-05-15 19:56:20 -03001882
Gilles Peskine449bd832023-01-11 14:50:10 +01001883 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001884
Gilles Peskine449bd832023-01-11 14:50:10 +01001885 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001886}
1887
Gilles Peskine449bd832023-01-11 14:50:10 +01001888static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001889{
Gilles Peskine449bd832023-01-11 14:50:10 +01001890 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1891 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001892}
1893
1894static const mbedtls_cipher_base_t chacha20_base_info = {
1895 MBEDTLS_CIPHER_ID_CHACHA20,
1896 NULL,
1897#if defined(MBEDTLS_CIPHER_MODE_CBC)
1898 NULL,
1899#endif
1900#if defined(MBEDTLS_CIPHER_MODE_CFB)
1901 NULL,
1902#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001903#if defined(MBEDTLS_CIPHER_MODE_OFB)
1904 NULL,
1905#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001906#if defined(MBEDTLS_CIPHER_MODE_CTR)
1907 NULL,
1908#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001909#if defined(MBEDTLS_CIPHER_MODE_XTS)
1910 NULL,
1911#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001912#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001913 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001914#endif
1915 chacha20_setkey_wrap,
1916 chacha20_setkey_wrap,
1917 chacha20_ctx_alloc,
1918 chacha20_ctx_free
1919};
1920static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001921 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001922 1,
1923 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001924 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001925 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001926 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001927 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001928 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001929};
1930#endif /* MBEDTLS_CHACHA20_C */
1931
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001932#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001933
Gilles Peskine449bd832023-01-11 14:50:10 +01001934static int chachapoly_setkey_wrap(void *ctx,
1935 const unsigned char *key,
1936 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001937{
Gilles Peskine449bd832023-01-11 14:50:10 +01001938 if (key_bitlen != 256U) {
1939 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1940 }
Daniel King8fe47012016-05-17 20:33:28 -03001941
Gilles Peskine449bd832023-01-11 14:50:10 +01001942 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1943 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1944 }
Daniel King8fe47012016-05-17 20:33:28 -03001945
Gilles Peskine449bd832023-01-11 14:50:10 +01001946 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001947}
1948
Gilles Peskine449bd832023-01-11 14:50:10 +01001949static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001950{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001951 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001952 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001953
Gilles Peskine449bd832023-01-11 14:50:10 +01001954 if (ctx == NULL) {
1955 return NULL;
1956 }
Daniel King8fe47012016-05-17 20:33:28 -03001957
Gilles Peskine449bd832023-01-11 14:50:10 +01001958 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001959
Gilles Peskine449bd832023-01-11 14:50:10 +01001960 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001961}
1962
Gilles Peskine449bd832023-01-11 14:50:10 +01001963static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001964{
Gilles Peskine449bd832023-01-11 14:50:10 +01001965 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1966 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001967}
1968
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001969static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001970 MBEDTLS_CIPHER_ID_CHACHA20,
1971 NULL,
1972#if defined(MBEDTLS_CIPHER_MODE_CBC)
1973 NULL,
1974#endif
1975#if defined(MBEDTLS_CIPHER_MODE_CFB)
1976 NULL,
1977#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001978#if defined(MBEDTLS_CIPHER_MODE_OFB)
1979 NULL,
1980#endif
Daniel King8fe47012016-05-17 20:33:28 -03001981#if defined(MBEDTLS_CIPHER_MODE_CTR)
1982 NULL,
1983#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001984#if defined(MBEDTLS_CIPHER_MODE_XTS)
1985 NULL,
1986#endif
Daniel King8fe47012016-05-17 20:33:28 -03001987#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1988 NULL,
1989#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001990 chachapoly_setkey_wrap,
1991 chachapoly_setkey_wrap,
1992 chachapoly_ctx_alloc,
1993 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001994};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001995static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001996 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001997 1,
1998 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001999 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002000 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002001 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002002 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002003 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002004};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002005#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002006
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002007#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002008static int null_crypt_stream(void *ctx, size_t length,
2009 const unsigned char *input,
2010 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002011{
2012 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002013 memmove(output, input, length);
2014 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002015}
2016
Gilles Peskine449bd832023-01-11 14:50:10 +01002017static int null_setkey(void *ctx, const unsigned char *key,
2018 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002019{
2020 ((void) ctx);
2021 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002022 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002023
Gilles Peskine449bd832023-01-11 14:50:10 +01002024 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002025}
2026
Gilles Peskine449bd832023-01-11 14:50:10 +01002027static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002028{
Gilles Peskine449bd832023-01-11 14:50:10 +01002029 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002030}
2031
Gilles Peskine449bd832023-01-11 14:50:10 +01002032static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002033{
2034 ((void) ctx);
2035}
2036
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002037static const mbedtls_cipher_base_t null_base_info = {
2038 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002039 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002040#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002041 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002042#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002043#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002044 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002045#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002046#if defined(MBEDTLS_CIPHER_MODE_OFB)
2047 NULL,
2048#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002049#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002050 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002051#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002052#if defined(MBEDTLS_CIPHER_MODE_XTS)
2053 NULL,
2054#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002055#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002056 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002057#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002058 null_setkey,
2059 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002060 null_ctx_alloc,
2061 null_ctx_free
2062};
2063
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002064static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002065 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002066 1,
2067 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002068 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002069 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002070 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002071 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002072 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002073};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002074#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002075
Jack Lloydffdf2882019-03-07 17:00:32 -05002076#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002077static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002078{
Gilles Peskine449bd832023-01-11 14:50:10 +01002079 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002080
Gilles Peskine449bd832023-01-11 14:50:10 +01002081 if (ctx != NULL) {
2082 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2083 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002084
Gilles Peskine449bd832023-01-11 14:50:10 +01002085 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002086}
2087
Gilles Peskine449bd832023-01-11 14:50:10 +01002088static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002089{
Gilles Peskine449bd832023-01-11 14:50:10 +01002090 mbedtls_nist_kw_free(ctx);
2091 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002092}
2093
Gilles Peskine449bd832023-01-11 14:50:10 +01002094static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2095 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002096{
Gilles Peskine449bd832023-01-11 14:50:10 +01002097 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2098 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002099}
2100
Gilles Peskine449bd832023-01-11 14:50:10 +01002101static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2102 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002103{
Gilles Peskine449bd832023-01-11 14:50:10 +01002104 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2105 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002106}
2107
2108static const mbedtls_cipher_base_t kw_aes_info = {
2109 MBEDTLS_CIPHER_ID_AES,
2110 NULL,
2111#if defined(MBEDTLS_CIPHER_MODE_CBC)
2112 NULL,
2113#endif
2114#if defined(MBEDTLS_CIPHER_MODE_CFB)
2115 NULL,
2116#endif
2117#if defined(MBEDTLS_CIPHER_MODE_OFB)
2118 NULL,
2119#endif
2120#if defined(MBEDTLS_CIPHER_MODE_CTR)
2121 NULL,
2122#endif
2123#if defined(MBEDTLS_CIPHER_MODE_XTS)
2124 NULL,
2125#endif
2126#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2127 NULL,
2128#endif
2129 kw_aes_setkey_wrap,
2130 kw_aes_setkey_unwrap,
2131 kw_ctx_alloc,
2132 kw_ctx_free,
2133};
2134
2135static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002136 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002137 16,
2138 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002139 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002140 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002141 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002142 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002143 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002144};
2145
Yanray Wang7732ced2023-09-14 13:51:14 +08002146#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002147static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002148 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002149 16,
2150 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002151 192 >> 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_192_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
2158static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002159 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002160 16,
2161 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002162 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002163 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002164 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002165 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002166 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002167};
Yanray Wang7732ced2023-09-14 13:51:14 +08002168#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002169
2170static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002171 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002172 16,
2173 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002174 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002175 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002176 MBEDTLS_CIPHER_AES_128_KWP,
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};
2180
Yanray Wang7732ced2023-09-14 13:51:14 +08002181#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002182static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002183 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002184 16,
2185 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002186 192 >> 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_192_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
2193static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002194 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002195 16,
2196 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002197 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002198 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002199 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002200 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002201 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002202};
Yanray Wang7732ced2023-09-14 13:51:14 +08002203#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002204#endif /* MBEDTLS_NIST_KW_C */
2205
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002206const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002207{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002208#if defined(MBEDTLS_AES_C)
2209 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002210#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002211 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2212 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002213#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002214#if defined(MBEDTLS_CIPHER_MODE_CBC)
2215 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002216#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002217 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2218 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002219#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002220#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002221#if defined(MBEDTLS_CIPHER_MODE_CFB)
2222 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002223#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002224 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2225 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002226#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002227#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002228#if defined(MBEDTLS_CIPHER_MODE_OFB)
2229 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002230#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002231 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2232 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2233#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002234#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002235#if defined(MBEDTLS_CIPHER_MODE_CTR)
2236 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002237#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002238 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2239 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002240#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002241#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002242#if defined(MBEDTLS_CIPHER_MODE_XTS)
2243 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002244#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002245 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2246#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002247#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002248#if defined(MBEDTLS_GCM_C)
2249 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002250#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002251 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2252 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002253#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002254#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002255#if defined(MBEDTLS_CCM_C)
2256 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002257#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002258 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2259 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002260#endif
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002261 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002262#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002263 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2264 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002265#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002266#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002267#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002268
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002269#if defined(MBEDTLS_CAMELLIA_C)
2270 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2271 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2272 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2273#if defined(MBEDTLS_CIPHER_MODE_CBC)
2274 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2275 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2276 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002277#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002278#if defined(MBEDTLS_CIPHER_MODE_CFB)
2279 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2280 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2281 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002282#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002283#if defined(MBEDTLS_CIPHER_MODE_CTR)
2284 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2285 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2286 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002287#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002288#if defined(MBEDTLS_GCM_C)
2289 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2290 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2291 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002292#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002293#if defined(MBEDTLS_CCM_C)
2294 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2295 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2296 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002297 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2298 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2299 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002300#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002301#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002302
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002303#if defined(MBEDTLS_ARIA_C)
2304 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2305 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2306 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2307#if defined(MBEDTLS_CIPHER_MODE_CBC)
2308 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2309 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2310 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2311#endif
2312#if defined(MBEDTLS_CIPHER_MODE_CFB)
2313 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2314 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2315 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2316#endif
2317#if defined(MBEDTLS_CIPHER_MODE_CTR)
2318 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2319 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2320 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2321#endif
2322#if defined(MBEDTLS_GCM_C)
2323 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2324 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2325 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2326#endif
2327#if defined(MBEDTLS_CCM_C)
2328 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2329 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2330 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002331 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2332 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2333 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002334#endif
2335#endif /* MBEDTLS_ARIA_C */
2336
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002337#if defined(MBEDTLS_DES_C)
2338 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2339 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2340 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2341#if defined(MBEDTLS_CIPHER_MODE_CBC)
2342 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2343 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2344 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002345#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002346#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002347
Daniel Kingbd920622016-05-15 19:56:20 -03002348#if defined(MBEDTLS_CHACHA20_C)
2349 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2350#endif
2351
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002352#if defined(MBEDTLS_CHACHAPOLY_C)
2353 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002354#endif
2355
Jack Lloydffdf2882019-03-07 17:00:32 -05002356#if defined(MBEDTLS_NIST_KW_C)
2357 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002358#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002359 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2360 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002361#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002362 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002363#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002364 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2365 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2366#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002367#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002368
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002369#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2370 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2371#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002372
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002373 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002374};
2375
Gilles Peskine449bd832023-01-11 14:50:10 +01002376#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2377 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002378int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002379
Dave Rodgman3b46b772023-06-24 13:25:06 +01002380const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002381#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002382 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002383#endif
2384#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002385 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002386#endif
2387#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002388 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002389#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002390#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002391 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002392#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002393#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002394 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002395#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002396#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002397 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002398#endif
2399#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002400 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002401#endif
2402#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002403 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002404#endif
2405#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002406 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002407#endif
2408#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002409 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002410#endif
2411#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002412 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002413#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002414#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002415 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002416#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002417#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002418 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002419#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002420#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002421 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002422#endif
2423#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002424 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002425#endif
2426#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002427 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002428#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002429#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002430 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002431#endif
2432};
2433
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002434#endif /* MBEDTLS_CIPHER_C */