blob: 63b725fb70c98b7f3b0b87a7a302c147cd87c1f9 [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
Valerio Settidb1ca8f2023-10-11 12:46:16 +020083#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES)
Dave Rodgman25d77cb2023-06-24 22:58:51 +010084 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
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200107#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES)
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100108 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}
Valerio Settid4a10ce2023-10-03 15:11:48 +0200579#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200580
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200581#if defined(MBEDTLS_CIPHER_HAVE_GCM)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200582static const mbedtls_cipher_base_t gcm_aes_info = {
583 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200584 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200585#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200586 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100587#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200588#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200589 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100590#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100591#if defined(MBEDTLS_CIPHER_MODE_OFB)
592 NULL,
593#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200594#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200595 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100596#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100597#if defined(MBEDTLS_CIPHER_MODE_XTS)
598 NULL,
599#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200600#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200601 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100602#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200603#if defined(MBEDTLS_GCM_C)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200604 gcm_aes_setkey_wrap,
605 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200606 gcm_ctx_alloc,
607 gcm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200608#else
609 NULL,
610 NULL,
611 NULL,
612 NULL,
613#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200614};
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200615#endif /* MBEDTLS_CIPHER_HAVE_GCM */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200616
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200617#if defined(MBEDTLS_CIPHER_HAVE_GCM)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200618static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100619 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100620 16,
621 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100622 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100623 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100624 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200625 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100626 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100627};
628
Yanray Wang7732ced2023-09-14 13:51:14 +0800629#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200630static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100631 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100632 16,
633 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100634 192 >> 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_192_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
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200639};
640
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200641static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100642 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100643 16,
644 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100645 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100646 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100647 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200648 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100649 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100650};
Yanray Wang7732ced2023-09-14 13:51:14 +0800651#endif
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200652#endif /* MBEDTLS_CIPHER_HAVE_GCM */
Paul Bakker68884e32013-01-07 18:20:04 +0100653
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200654#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100655static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
656 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200657{
Gilles Peskine449bd832023-01-11 14:50:10 +0100658 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
659 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200660}
Valerio Settid4a10ce2023-10-03 15:11:48 +0200661#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200662
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200663#if defined(MBEDTLS_CIPHER_HAVE_CCM)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200664static const mbedtls_cipher_base_t ccm_aes_info = {
665 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200666 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200667#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200668 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100669#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200670#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200671 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100672#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100673#if defined(MBEDTLS_CIPHER_MODE_OFB)
674 NULL,
675#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200676#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200677 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100678#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100679#if defined(MBEDTLS_CIPHER_MODE_XTS)
680 NULL,
681#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200682#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200683 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100684#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200685#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200686 ccm_aes_setkey_wrap,
687 ccm_aes_setkey_wrap,
688 ccm_ctx_alloc,
689 ccm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200690#else
691 NULL,
692 NULL,
693 NULL,
694 NULL,
695#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200696};
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200697#endif /* MBEDTLS_CIPHER_HAVE_CCM */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200698
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200699#if defined(MBEDTLS_CIPHER_HAVE_CCM)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200700static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100701 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100702 16,
703 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100704 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100705 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100706 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200707 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100708 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200709};
710
Yanray Wang7732ced2023-09-14 13:51:14 +0800711#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200712static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100713 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100714 16,
715 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100716 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100717 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100718 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200719 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100720 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200721};
722
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200723static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100724 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100725 16,
726 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100727 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100728 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100729 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200730 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100731 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200732};
Yanray Wang7732ced2023-09-14 13:51:14 +0800733#endif
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200734#endif /* MBEDTLS_CIPHER_HAVE_CCM */
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200735
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200736#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200737static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100738 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100739 16,
740 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100741 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100742 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100743 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200744 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100745 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200746};
747
Yanray Wang7732ced2023-09-14 13:51:14 +0800748#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200749static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100750 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100751 16,
752 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100753 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100754 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100755 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200756 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100757 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200758};
759
760static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100761 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100762 16,
763 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100764 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100765 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100766 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200767 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100768 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200769};
Yanray Wang7732ced2023-09-14 13:51:14 +0800770#endif
Valerio Settidb1ca8f2023-10-11 12:46:16 +0200771#endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200772
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200773#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000774
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200775#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000776
Gilles Peskine449bd832023-01-11 14:50:10 +0100777static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
778 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200779{
Gilles Peskine449bd832023-01-11 14:50:10 +0100780 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
781 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200782}
783
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200784#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100785static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
786 size_t length, unsigned char *iv,
787 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000788{
Gilles Peskine449bd832023-01-11 14:50:10 +0100789 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
790 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000791}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200792#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000793
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200794#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100795static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
796 size_t length, size_t *iv_off, unsigned char *iv,
797 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000798{
Gilles Peskine449bd832023-01-11 14:50:10 +0100799 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
800 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000801}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200802#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000803
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200804#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100805static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
806 unsigned char *nonce_counter, unsigned char *stream_block,
807 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000808{
Gilles Peskine449bd832023-01-11 14:50:10 +0100809 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
810 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000811}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200812#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000813
Gilles Peskine449bd832023-01-11 14:50:10 +0100814static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
815 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000816{
Gilles Peskine449bd832023-01-11 14:50:10 +0100817 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000818}
819
Gilles Peskine449bd832023-01-11 14:50:10 +0100820static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
821 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000822{
Gilles Peskine449bd832023-01-11 14:50:10 +0100823 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000824}
825
Gilles Peskine449bd832023-01-11 14:50:10 +0100826static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000827{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200828 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100829 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200830
Gilles Peskine449bd832023-01-11 14:50:10 +0100831 if (ctx == NULL) {
832 return NULL;
833 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200834
Gilles Peskine449bd832023-01-11 14:50:10 +0100835 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200836
Gilles Peskine449bd832023-01-11 14:50:10 +0100837 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000838}
839
Gilles Peskine449bd832023-01-11 14:50:10 +0100840static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000841{
Gilles Peskine449bd832023-01-11 14:50:10 +0100842 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
843 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000844}
845
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200846static const mbedtls_cipher_base_t camellia_info = {
847 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200848 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200849#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000850 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100851#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200852#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000853 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100854#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100855#if defined(MBEDTLS_CIPHER_MODE_OFB)
856 NULL,
857#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200858#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000859 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100860#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100861#if defined(MBEDTLS_CIPHER_MODE_XTS)
862 NULL,
863#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200864#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200865 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100866#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000867 camellia_setkey_enc_wrap,
868 camellia_setkey_dec_wrap,
869 camellia_ctx_alloc,
870 camellia_ctx_free
871};
872
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200873static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100874 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100875 16,
876 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100877 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100878 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100879 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200880 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100881 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200882};
883
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200884static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100885 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100886 16,
887 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100888 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100889 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100890 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200891 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100892 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200893};
894
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200895static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100896 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100897 16,
898 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100899 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100900 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100901 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200902 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100903 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200904};
905
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200906#if defined(MBEDTLS_CIPHER_MODE_CBC)
907static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100908 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100909 16,
910 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100911 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100912 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100913 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200914 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100915 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000916};
917
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200918static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100919 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100920 16,
921 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100922 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100923 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100924 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200925 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100926 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000927};
928
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200929static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100930 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100931 16,
932 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100933 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100934 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100935 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200936 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100937 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000938};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200939#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000940
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200941#if defined(MBEDTLS_CIPHER_MODE_CFB)
942static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100943 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100944 16,
945 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100946 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100947 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100948 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200949 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100950 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000951};
952
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200953static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100954 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100955 16,
956 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100957 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100958 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100959 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200960 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100961 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000962};
963
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200964static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100965 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100966 16,
967 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100968 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100969 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100970 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200971 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100972 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000973};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200974#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000975
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200976#if defined(MBEDTLS_CIPHER_MODE_CTR)
977static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100978 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100979 16,
980 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100981 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100982 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100983 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200984 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100985 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000986};
987
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200988static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100989 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100990 16,
991 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100992 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100993 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100994 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200995 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100996 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000997};
998
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200999static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001000 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001001 16,
1002 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001003 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001004 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001005 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001006 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001007 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +00001008};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001009#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +00001010
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001011#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001012static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1013 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001014{
Gilles Peskine449bd832023-01-11 14:50:10 +01001015 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1016 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001017}
1018
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001019static const mbedtls_cipher_base_t gcm_camellia_info = {
1020 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001021 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001022#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001023 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001024#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001025#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001026 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001027#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001028#if defined(MBEDTLS_CIPHER_MODE_OFB)
1029 NULL,
1030#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001031#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001032 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001033#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001034#if defined(MBEDTLS_CIPHER_MODE_XTS)
1035 NULL,
1036#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001037#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001038 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001039#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001040 gcm_camellia_setkey_wrap,
1041 gcm_camellia_setkey_wrap,
1042 gcm_ctx_alloc,
1043 gcm_ctx_free,
1044};
1045
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001046static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001047 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001048 16,
1049 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001050 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001051 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001052 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001053 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001054 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001055};
1056
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001057static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001058 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001059 16,
1060 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001061 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001062 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001063 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001064 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001065 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001066};
1067
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001068static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001069 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001070 16,
1071 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001072 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001073 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001074 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001075 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001076 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001077};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001078#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001079
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001080#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001081static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1082 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001083{
Gilles Peskine449bd832023-01-11 14:50:10 +01001084 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1085 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001086}
1087
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001088static const mbedtls_cipher_base_t ccm_camellia_info = {
1089 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001090 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001091#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001092 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001093#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001094#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001095 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001096#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001097#if defined(MBEDTLS_CIPHER_MODE_OFB)
1098 NULL,
1099#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001100#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001101 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001102#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001103#if defined(MBEDTLS_CIPHER_MODE_XTS)
1104 NULL,
1105#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001106#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001107 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001108#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001109 ccm_camellia_setkey_wrap,
1110 ccm_camellia_setkey_wrap,
1111 ccm_ctx_alloc,
1112 ccm_ctx_free,
1113};
1114
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001115static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001116 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001117 16,
1118 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001119 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001120 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001121 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001122 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001123 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001124};
1125
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001126static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001127 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001128 16,
1129 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001130 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001131 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001132 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001133 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001134 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001135};
1136
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001137static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001138 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001139 16,
1140 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001141 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001142 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001143 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001144 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001145 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001146};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001147
1148static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001149 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001150 16,
1151 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001152 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001153 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001154 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001155 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001156 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001157};
1158
1159static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001160 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001161 16,
1162 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001163 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001164 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001165 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001166 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001167 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001168};
1169
1170static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001171 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001172 16,
1173 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001174 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001175 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001176 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001177 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001178 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001179};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001180#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001181
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001182#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001183
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001184#if defined(MBEDTLS_ARIA_C)
1185
Gilles Peskine449bd832023-01-11 14:50:10 +01001186static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1187 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001188{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001189 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001190 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1191 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001192}
1193
1194#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001195static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1196 size_t length, unsigned char *iv,
1197 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001198{
Gilles Peskine449bd832023-01-11 14:50:10 +01001199 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1200 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001201}
1202#endif /* MBEDTLS_CIPHER_MODE_CBC */
1203
1204#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001205static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1206 size_t length, size_t *iv_off, unsigned char *iv,
1207 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001208{
Gilles Peskine449bd832023-01-11 14:50:10 +01001209 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1210 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001211}
1212#endif /* MBEDTLS_CIPHER_MODE_CFB */
1213
1214#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001215static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1216 unsigned char *nonce_counter, unsigned char *stream_block,
1217 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001218{
Gilles Peskine449bd832023-01-11 14:50:10 +01001219 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1220 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001221}
1222#endif /* MBEDTLS_CIPHER_MODE_CTR */
1223
Gilles Peskine449bd832023-01-11 14:50:10 +01001224static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1225 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001226{
Gilles Peskine449bd832023-01-11 14:50:10 +01001227 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001228}
1229
Gilles Peskine449bd832023-01-11 14:50:10 +01001230static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1231 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001232{
Gilles Peskine449bd832023-01-11 14:50:10 +01001233 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001234}
1235
Gilles Peskine449bd832023-01-11 14:50:10 +01001236static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001237{
1238 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001239 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001240
Gilles Peskine449bd832023-01-11 14:50:10 +01001241 if (ctx == NULL) {
1242 return NULL;
1243 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001244
Gilles Peskine449bd832023-01-11 14:50:10 +01001245 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001246
Gilles Peskine449bd832023-01-11 14:50:10 +01001247 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001248}
1249
Gilles Peskine449bd832023-01-11 14:50:10 +01001250static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001251{
Gilles Peskine449bd832023-01-11 14:50:10 +01001252 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1253 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001254}
1255
1256static const mbedtls_cipher_base_t aria_info = {
1257 MBEDTLS_CIPHER_ID_ARIA,
1258 aria_crypt_ecb_wrap,
1259#if defined(MBEDTLS_CIPHER_MODE_CBC)
1260 aria_crypt_cbc_wrap,
1261#endif
1262#if defined(MBEDTLS_CIPHER_MODE_CFB)
1263 aria_crypt_cfb128_wrap,
1264#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001265#if defined(MBEDTLS_CIPHER_MODE_OFB)
1266 NULL,
1267#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001268#if defined(MBEDTLS_CIPHER_MODE_CTR)
1269 aria_crypt_ctr_wrap,
1270#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001271#if defined(MBEDTLS_CIPHER_MODE_XTS)
1272 NULL,
1273#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001274#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1275 NULL,
1276#endif
1277 aria_setkey_enc_wrap,
1278 aria_setkey_dec_wrap,
1279 aria_ctx_alloc,
1280 aria_ctx_free
1281};
1282
1283static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001284 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001285 16,
1286 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001287 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001288 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001289 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001290 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001291 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001292};
1293
1294static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001295 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001296 16,
1297 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001298 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001299 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001300 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001301 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001302 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001303};
1304
1305static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001306 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001307 16,
1308 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001309 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001310 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001311 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001312 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001313 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001314};
1315
1316#if defined(MBEDTLS_CIPHER_MODE_CBC)
1317static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001318 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001319 16,
1320 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001321 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001322 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001323 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001324 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001325 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001326};
1327
1328static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001329 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001330 16,
1331 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001332 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001333 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001334 MBEDTLS_CIPHER_ARIA_192_CBC,
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_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001340 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001341 16,
1342 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001343 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001344 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001345 MBEDTLS_CIPHER_ARIA_256_CBC,
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#endif /* MBEDTLS_CIPHER_MODE_CBC */
1350
1351#if defined(MBEDTLS_CIPHER_MODE_CFB)
1352static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001353 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001354 16,
1355 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001356 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001357 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001358 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001359 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001360 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001361};
1362
1363static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001364 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001365 16,
1366 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001367 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001368 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001369 MBEDTLS_CIPHER_ARIA_192_CFB128,
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_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001375 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001376 16,
1377 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001378 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001379 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001380 MBEDTLS_CIPHER_ARIA_256_CFB128,
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#endif /* MBEDTLS_CIPHER_MODE_CFB */
1385
1386#if defined(MBEDTLS_CIPHER_MODE_CTR)
1387static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001388 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001389 16,
1390 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001391 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001392 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001393 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001394 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001395 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001396};
1397
1398static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001399 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001400 16,
1401 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001402 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001403 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001404 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001405 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001406 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001407};
1408
1409static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001410 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001411 16,
1412 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001413 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001414 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001415 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001416 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001417 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001418};
1419#endif /* MBEDTLS_CIPHER_MODE_CTR */
1420
1421#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001422static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1423 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001424{
Gilles Peskine449bd832023-01-11 14:50:10 +01001425 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1426 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001427}
1428
1429static const mbedtls_cipher_base_t gcm_aria_info = {
1430 MBEDTLS_CIPHER_ID_ARIA,
1431 NULL,
1432#if defined(MBEDTLS_CIPHER_MODE_CBC)
1433 NULL,
1434#endif
1435#if defined(MBEDTLS_CIPHER_MODE_CFB)
1436 NULL,
1437#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001438#if defined(MBEDTLS_CIPHER_MODE_OFB)
1439 NULL,
1440#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001441#if defined(MBEDTLS_CIPHER_MODE_CTR)
1442 NULL,
1443#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001444#if defined(MBEDTLS_CIPHER_MODE_XTS)
1445 NULL,
1446#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001447#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1448 NULL,
1449#endif
1450 gcm_aria_setkey_wrap,
1451 gcm_aria_setkey_wrap,
1452 gcm_ctx_alloc,
1453 gcm_ctx_free,
1454};
1455
1456static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001457 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001458 16,
1459 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001460 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001461 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001462 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001463 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001464 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001465};
1466
1467static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001468 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001469 16,
1470 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001471 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001472 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001473 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001474 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001475 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001476};
1477
1478static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001479 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001480 16,
1481 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001482 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001483 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001484 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001485 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001486 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001487};
1488#endif /* MBEDTLS_GCM_C */
1489
1490#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001491static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1492 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001493{
Gilles Peskine449bd832023-01-11 14:50:10 +01001494 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1495 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001496}
1497
1498static const mbedtls_cipher_base_t ccm_aria_info = {
1499 MBEDTLS_CIPHER_ID_ARIA,
1500 NULL,
1501#if defined(MBEDTLS_CIPHER_MODE_CBC)
1502 NULL,
1503#endif
1504#if defined(MBEDTLS_CIPHER_MODE_CFB)
1505 NULL,
1506#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001507#if defined(MBEDTLS_CIPHER_MODE_OFB)
1508 NULL,
1509#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001510#if defined(MBEDTLS_CIPHER_MODE_CTR)
1511 NULL,
1512#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001513#if defined(MBEDTLS_CIPHER_MODE_XTS)
1514 NULL,
1515#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001516#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1517 NULL,
1518#endif
1519 ccm_aria_setkey_wrap,
1520 ccm_aria_setkey_wrap,
1521 ccm_ctx_alloc,
1522 ccm_ctx_free,
1523};
1524
1525static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001526 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001527 16,
1528 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001529 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001530 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001531 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001532 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001533 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001534};
1535
1536static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001537 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001538 16,
1539 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001540 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001541 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001542 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001543 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001544 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001545};
1546
1547static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001548 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001549 16,
1550 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001551 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001552 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001553 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001554 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001555 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001556};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001557
1558static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001559 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001560 16,
1561 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001562 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001563 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001564 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001565 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001566 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001567};
1568
1569static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001570 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001571 16,
1572 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001573 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001574 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001575 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001576 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001577 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001578};
1579
1580static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001581 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001582 16,
1583 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001584 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001585 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001586 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001587 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001588 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001589};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001590#endif /* MBEDTLS_CCM_C */
1591
1592#endif /* MBEDTLS_ARIA_C */
1593
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001594#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001595
Gilles Peskine449bd832023-01-11 14:50:10 +01001596static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1597 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001598{
1599 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001600 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001601}
1602
Gilles Peskine449bd832023-01-11 14:50:10 +01001603static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1604 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001605{
1606 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001607 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001608}
1609
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001610#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001611static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1612 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001613{
Gilles Peskine449bd832023-01-11 14:50:10 +01001614 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1615 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001616}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001617#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001618
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001619#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001620static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1621 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001622{
Gilles Peskine449bd832023-01-11 14:50:10 +01001623 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1624 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001625}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001626#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001627
Gilles Peskine449bd832023-01-11 14:50:10 +01001628static int des_setkey_dec_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_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001634}
1635
Gilles Peskine449bd832023-01-11 14:50:10 +01001636static int des_setkey_enc_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_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001642}
1643
Gilles Peskine449bd832023-01-11 14:50:10 +01001644static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1645 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001646{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001647 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001648
Gilles Peskine449bd832023-01-11 14:50:10 +01001649 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001650}
1651
Gilles Peskine449bd832023-01-11 14:50:10 +01001652static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1653 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001654{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001655 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001656
Gilles Peskine449bd832023-01-11 14:50:10 +01001657 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001658}
1659
Gilles Peskine449bd832023-01-11 14:50:10 +01001660static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1661 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001662{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001663 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001664
Gilles Peskine449bd832023-01-11 14:50:10 +01001665 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001666}
1667
Gilles Peskine449bd832023-01-11 14:50:10 +01001668static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1669 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001670{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001671 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001672
Gilles Peskine449bd832023-01-11 14:50:10 +01001673 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001674}
1675
Gilles Peskine449bd832023-01-11 14:50:10 +01001676static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001677{
Gilles Peskine449bd832023-01-11 14:50:10 +01001678 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001679
Gilles Peskine449bd832023-01-11 14:50:10 +01001680 if (des == NULL) {
1681 return NULL;
1682 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001683
Gilles Peskine449bd832023-01-11 14:50:10 +01001684 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001685
Gilles Peskine449bd832023-01-11 14:50:10 +01001686 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001687}
1688
Gilles Peskine449bd832023-01-11 14:50:10 +01001689static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001690{
Gilles Peskine449bd832023-01-11 14:50:10 +01001691 mbedtls_des_free((mbedtls_des_context *) ctx);
1692 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001693}
1694
Gilles Peskine449bd832023-01-11 14:50:10 +01001695static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001696{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001697 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001698 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001699
Gilles Peskine449bd832023-01-11 14:50:10 +01001700 if (des3 == NULL) {
1701 return NULL;
1702 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001703
Gilles Peskine449bd832023-01-11 14:50:10 +01001704 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001705
Gilles Peskine449bd832023-01-11 14:50:10 +01001706 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001707}
1708
Gilles Peskine449bd832023-01-11 14:50:10 +01001709static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001710{
Gilles Peskine449bd832023-01-11 14:50:10 +01001711 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1712 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001713}
1714
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001715static const mbedtls_cipher_base_t des_info = {
1716 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001717 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001718#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001719 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001720#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001721#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001722 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001723#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001724#if defined(MBEDTLS_CIPHER_MODE_OFB)
1725 NULL,
1726#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001727#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001728 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001729#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001730#if defined(MBEDTLS_CIPHER_MODE_XTS)
1731 NULL,
1732#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001733#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001734 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001735#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001736 des_setkey_enc_wrap,
1737 des_setkey_dec_wrap,
1738 des_ctx_alloc,
1739 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001740};
1741
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001742static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001743 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001744 8,
1745 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001746 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001747 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001748 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001749 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001750 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001751};
1752
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001753#if defined(MBEDTLS_CIPHER_MODE_CBC)
1754static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001755 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001756 8,
1757 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001758 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001759 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001760 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001761 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001762 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001763};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001764#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001765
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001766static const mbedtls_cipher_base_t des_ede_info = {
1767 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001768 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001769#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001770 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001771#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001772#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001773 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001774#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001775#if defined(MBEDTLS_CIPHER_MODE_OFB)
1776 NULL,
1777#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001778#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001779 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001780#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001781#if defined(MBEDTLS_CIPHER_MODE_XTS)
1782 NULL,
1783#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001784#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001785 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001786#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001787 des3_set2key_enc_wrap,
1788 des3_set2key_dec_wrap,
1789 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001790 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001791};
1792
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001793static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001794 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001795 8,
1796 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001797 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001798 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001799 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001800 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001801 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001802};
1803
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001804#if defined(MBEDTLS_CIPHER_MODE_CBC)
1805static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001806 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001807 8,
1808 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001809 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001810 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001811 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001812 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001813 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001814};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001815#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001816
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001817static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001818 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001819 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001820#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001821 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001822#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001823#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001824 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001825#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001826#if defined(MBEDTLS_CIPHER_MODE_OFB)
1827 NULL,
1828#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001829#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001830 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001831#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001832#if defined(MBEDTLS_CIPHER_MODE_XTS)
1833 NULL,
1834#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001835#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001836 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001837#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001838 des3_set3key_enc_wrap,
1839 des3_set3key_dec_wrap,
1840 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001841 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001842};
1843
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001844static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001845 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001846 8,
1847 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001848 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001849 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001850 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001851 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001852 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001853};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001854#if defined(MBEDTLS_CIPHER_MODE_CBC)
1855static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001856 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001857 8,
1858 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001859 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001860 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001861 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001862 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001863 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001864};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001865#endif /* MBEDTLS_CIPHER_MODE_CBC */
1866#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001867
Daniel Kingbd920622016-05-15 19:56:20 -03001868#if defined(MBEDTLS_CHACHA20_C)
1869
Gilles Peskine449bd832023-01-11 14:50:10 +01001870static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1871 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001872{
Gilles Peskine449bd832023-01-11 14:50:10 +01001873 if (key_bitlen != 256U) {
1874 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1875 }
Daniel Kingbd920622016-05-15 19:56:20 -03001876
Gilles Peskine449bd832023-01-11 14:50:10 +01001877 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1878 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1879 }
Daniel Kingbd920622016-05-15 19:56:20 -03001880
Gilles Peskine449bd832023-01-11 14:50:10 +01001881 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001882}
1883
Gilles Peskine449bd832023-01-11 14:50:10 +01001884static int chacha20_stream_wrap(void *ctx, size_t length,
1885 const unsigned char *input,
1886 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001887{
Janos Follath24eed8d2019-11-22 13:21:35 +00001888 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001889
Gilles Peskine449bd832023-01-11 14:50:10 +01001890 ret = mbedtls_chacha20_update(ctx, length, input, output);
1891 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1892 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1893 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001894
Gilles Peskine449bd832023-01-11 14:50:10 +01001895 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001896}
1897
Gilles Peskine449bd832023-01-11 14:50:10 +01001898static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001899{
1900 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001901 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001902
Gilles Peskine449bd832023-01-11 14:50:10 +01001903 if (ctx == NULL) {
1904 return NULL;
1905 }
Daniel Kingbd920622016-05-15 19:56:20 -03001906
Gilles Peskine449bd832023-01-11 14:50:10 +01001907 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001908
Gilles Peskine449bd832023-01-11 14:50:10 +01001909 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001910}
1911
Gilles Peskine449bd832023-01-11 14:50:10 +01001912static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001913{
Gilles Peskine449bd832023-01-11 14:50:10 +01001914 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1915 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001916}
1917
1918static const mbedtls_cipher_base_t chacha20_base_info = {
1919 MBEDTLS_CIPHER_ID_CHACHA20,
1920 NULL,
1921#if defined(MBEDTLS_CIPHER_MODE_CBC)
1922 NULL,
1923#endif
1924#if defined(MBEDTLS_CIPHER_MODE_CFB)
1925 NULL,
1926#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001927#if defined(MBEDTLS_CIPHER_MODE_OFB)
1928 NULL,
1929#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001930#if defined(MBEDTLS_CIPHER_MODE_CTR)
1931 NULL,
1932#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001933#if defined(MBEDTLS_CIPHER_MODE_XTS)
1934 NULL,
1935#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001936#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001937 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001938#endif
1939 chacha20_setkey_wrap,
1940 chacha20_setkey_wrap,
1941 chacha20_ctx_alloc,
1942 chacha20_ctx_free
1943};
1944static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001945 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001946 1,
1947 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001948 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001949 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001950 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001951 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001952 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001953};
1954#endif /* MBEDTLS_CHACHA20_C */
1955
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001956#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001957
Gilles Peskine449bd832023-01-11 14:50:10 +01001958static int chachapoly_setkey_wrap(void *ctx,
1959 const unsigned char *key,
1960 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001961{
Gilles Peskine449bd832023-01-11 14:50:10 +01001962 if (key_bitlen != 256U) {
1963 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1964 }
Daniel King8fe47012016-05-17 20:33:28 -03001965
Gilles Peskine449bd832023-01-11 14:50:10 +01001966 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1967 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1968 }
Daniel King8fe47012016-05-17 20:33:28 -03001969
Gilles Peskine449bd832023-01-11 14:50:10 +01001970 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001971}
1972
Gilles Peskine449bd832023-01-11 14:50:10 +01001973static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001974{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001975 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001976 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001977
Gilles Peskine449bd832023-01-11 14:50:10 +01001978 if (ctx == NULL) {
1979 return NULL;
1980 }
Daniel King8fe47012016-05-17 20:33:28 -03001981
Gilles Peskine449bd832023-01-11 14:50:10 +01001982 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001983
Gilles Peskine449bd832023-01-11 14:50:10 +01001984 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001985}
1986
Gilles Peskine449bd832023-01-11 14:50:10 +01001987static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001988{
Gilles Peskine449bd832023-01-11 14:50:10 +01001989 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1990 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001991}
1992
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001993static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001994 MBEDTLS_CIPHER_ID_CHACHA20,
1995 NULL,
1996#if defined(MBEDTLS_CIPHER_MODE_CBC)
1997 NULL,
1998#endif
1999#if defined(MBEDTLS_CIPHER_MODE_CFB)
2000 NULL,
2001#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002002#if defined(MBEDTLS_CIPHER_MODE_OFB)
2003 NULL,
2004#endif
Daniel King8fe47012016-05-17 20:33:28 -03002005#if defined(MBEDTLS_CIPHER_MODE_CTR)
2006 NULL,
2007#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002008#if defined(MBEDTLS_CIPHER_MODE_XTS)
2009 NULL,
2010#endif
Daniel King8fe47012016-05-17 20:33:28 -03002011#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2012 NULL,
2013#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002014 chachapoly_setkey_wrap,
2015 chachapoly_setkey_wrap,
2016 chachapoly_ctx_alloc,
2017 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002018};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002019static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002020 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002021 1,
2022 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002023 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002024 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002025 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002026 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002027 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002028};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002029#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002030
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002031#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002032static int null_crypt_stream(void *ctx, size_t length,
2033 const unsigned char *input,
2034 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002035{
2036 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002037 memmove(output, input, length);
2038 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002039}
2040
Gilles Peskine449bd832023-01-11 14:50:10 +01002041static int null_setkey(void *ctx, const unsigned char *key,
2042 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002043{
2044 ((void) ctx);
2045 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002046 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002047
Gilles Peskine449bd832023-01-11 14:50:10 +01002048 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002049}
2050
Gilles Peskine449bd832023-01-11 14:50:10 +01002051static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002052{
Gilles Peskine449bd832023-01-11 14:50:10 +01002053 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002054}
2055
Gilles Peskine449bd832023-01-11 14:50:10 +01002056static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002057{
2058 ((void) ctx);
2059}
2060
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002061static const mbedtls_cipher_base_t null_base_info = {
2062 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002063 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002064#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002065 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002066#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002067#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002068 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002069#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002070#if defined(MBEDTLS_CIPHER_MODE_OFB)
2071 NULL,
2072#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002073#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002074 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002075#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002076#if defined(MBEDTLS_CIPHER_MODE_XTS)
2077 NULL,
2078#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002079#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002080 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002081#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002082 null_setkey,
2083 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002084 null_ctx_alloc,
2085 null_ctx_free
2086};
2087
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002088static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002089 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002090 1,
2091 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002092 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002093 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002094 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002095 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002096 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002097};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002098#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002099
Jack Lloydffdf2882019-03-07 17:00:32 -05002100#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002101static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002102{
Gilles Peskine449bd832023-01-11 14:50:10 +01002103 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002104
Gilles Peskine449bd832023-01-11 14:50:10 +01002105 if (ctx != NULL) {
2106 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2107 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002108
Gilles Peskine449bd832023-01-11 14:50:10 +01002109 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002110}
2111
Gilles Peskine449bd832023-01-11 14:50:10 +01002112static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002113{
Gilles Peskine449bd832023-01-11 14:50:10 +01002114 mbedtls_nist_kw_free(ctx);
2115 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002116}
2117
Gilles Peskine449bd832023-01-11 14:50:10 +01002118static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2119 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002120{
Gilles Peskine449bd832023-01-11 14:50:10 +01002121 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2122 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002123}
2124
Gilles Peskine449bd832023-01-11 14:50:10 +01002125static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2126 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002127{
Gilles Peskine449bd832023-01-11 14:50:10 +01002128 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2129 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002130}
2131
2132static const mbedtls_cipher_base_t kw_aes_info = {
2133 MBEDTLS_CIPHER_ID_AES,
2134 NULL,
2135#if defined(MBEDTLS_CIPHER_MODE_CBC)
2136 NULL,
2137#endif
2138#if defined(MBEDTLS_CIPHER_MODE_CFB)
2139 NULL,
2140#endif
2141#if defined(MBEDTLS_CIPHER_MODE_OFB)
2142 NULL,
2143#endif
2144#if defined(MBEDTLS_CIPHER_MODE_CTR)
2145 NULL,
2146#endif
2147#if defined(MBEDTLS_CIPHER_MODE_XTS)
2148 NULL,
2149#endif
2150#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2151 NULL,
2152#endif
2153 kw_aes_setkey_wrap,
2154 kw_aes_setkey_unwrap,
2155 kw_ctx_alloc,
2156 kw_ctx_free,
2157};
2158
2159static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002160 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002161 16,
2162 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002163 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002164 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002165 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002166 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002167 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002168};
2169
Yanray Wang7732ced2023-09-14 13:51:14 +08002170#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002171static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002172 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002173 16,
2174 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002175 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002176 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002177 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002178 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002179 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002180};
2181
2182static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002183 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002184 16,
2185 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002186 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002187 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002188 MBEDTLS_CIPHER_AES_256_KW,
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};
Yanray Wang7732ced2023-09-14 13:51:14 +08002192#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002193
2194static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002195 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002196 16,
2197 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002198 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002199 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002200 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002201 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002202 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002203};
2204
Yanray Wang7732ced2023-09-14 13:51:14 +08002205#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002206static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002207 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002208 16,
2209 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002210 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002211 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002212 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002213 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002214 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002215};
2216
2217static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002218 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002219 16,
2220 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002221 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002222 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002223 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002224 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002225 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002226};
Yanray Wang7732ced2023-09-14 13:51:14 +08002227#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002228#endif /* MBEDTLS_NIST_KW_C */
2229
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002230const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002231{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002232#if defined(MBEDTLS_AES_C)
2233 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002234#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002235 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2236 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002237#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002238#if defined(MBEDTLS_CIPHER_MODE_CBC)
2239 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002240#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002241 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2242 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002243#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002244#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002245#if defined(MBEDTLS_CIPHER_MODE_CFB)
2246 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002247#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002248 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2249 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002250#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002251#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002252#if defined(MBEDTLS_CIPHER_MODE_OFB)
2253 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002254#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002255 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2256 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2257#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002258#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002259#if defined(MBEDTLS_CIPHER_MODE_CTR)
2260 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002261#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002262 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2263 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002264#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002265#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002266#if defined(MBEDTLS_CIPHER_MODE_XTS)
2267 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002268#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002269 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2270#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002271#endif
Valerio Settidb1ca8f2023-10-11 12:46:16 +02002272#if defined(MBEDTLS_CIPHER_HAVE_GCM)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002273 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002274#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002275 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2276 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002277#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002278#endif
Valerio Settidb1ca8f2023-10-11 12:46:16 +02002279#if defined(MBEDTLS_CIPHER_HAVE_CCM)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002280 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002281#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002282 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2283 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002284#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002285#endif
Valerio Settidb1ca8f2023-10-11 12:46:16 +02002286#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002287 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002288#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002289 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2290 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002291#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002292#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002293#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002294
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002295#if defined(MBEDTLS_CAMELLIA_C)
2296 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2297 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2298 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2299#if defined(MBEDTLS_CIPHER_MODE_CBC)
2300 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2301 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2302 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002303#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002304#if defined(MBEDTLS_CIPHER_MODE_CFB)
2305 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2306 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2307 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002308#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002309#if defined(MBEDTLS_CIPHER_MODE_CTR)
2310 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2311 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2312 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002313#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002314#if defined(MBEDTLS_GCM_C)
2315 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2316 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2317 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002318#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002319#if defined(MBEDTLS_CCM_C)
2320 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2321 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2322 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002323 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2324 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2325 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002326#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002327#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002328
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002329#if defined(MBEDTLS_ARIA_C)
2330 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2331 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2332 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2333#if defined(MBEDTLS_CIPHER_MODE_CBC)
2334 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2335 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2336 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2337#endif
2338#if defined(MBEDTLS_CIPHER_MODE_CFB)
2339 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2340 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2341 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2342#endif
2343#if defined(MBEDTLS_CIPHER_MODE_CTR)
2344 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2345 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2346 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2347#endif
2348#if defined(MBEDTLS_GCM_C)
2349 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2350 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2351 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2352#endif
2353#if defined(MBEDTLS_CCM_C)
2354 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2355 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2356 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002357 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2358 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2359 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002360#endif
2361#endif /* MBEDTLS_ARIA_C */
2362
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002363#if defined(MBEDTLS_DES_C)
2364 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2365 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2366 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2367#if defined(MBEDTLS_CIPHER_MODE_CBC)
2368 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2369 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2370 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002371#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002372#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002373
Daniel Kingbd920622016-05-15 19:56:20 -03002374#if defined(MBEDTLS_CHACHA20_C)
2375 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2376#endif
2377
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002378#if defined(MBEDTLS_CHACHAPOLY_C)
2379 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002380#endif
2381
Jack Lloydffdf2882019-03-07 17:00:32 -05002382#if defined(MBEDTLS_NIST_KW_C)
2383 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002384#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002385 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2386 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002387#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002388 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002389#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002390 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2391 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2392#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002393#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002394
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002395#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2396 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2397#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002398
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002399 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002400};
2401
Gilles Peskine449bd832023-01-11 14:50:10 +01002402#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2403 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002404int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002405
Dave Rodgman3b46b772023-06-24 13:25:06 +01002406const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002407#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002408 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002409#endif
2410#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002411 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002412#endif
2413#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002414 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002415#endif
Valerio Settidb1ca8f2023-10-11 12:46:16 +02002416#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002417 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002418#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002419#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002420 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002421#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002422#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002423 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002424#endif
2425#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002426 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002427#endif
2428#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002429 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002430#endif
2431#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002432 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002433#endif
2434#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002435 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002436#endif
2437#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002438 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002439#endif
Valerio Settidb1ca8f2023-10-11 12:46:16 +02002440#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002441 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002442#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002443#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002444 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002445#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002446#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002447 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002448#endif
2449#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002450 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002451#endif
2452#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002453 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002454#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002455#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002456 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002457#endif
2458};
2459
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002460#endif /* MBEDTLS_CIPHER_C */