blob: 5a789ced96361d22e8e25035bcb2143139983e5b [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 Settid4a10ce2023-10-03 15:11:48 +020083#if (defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)) || \
84 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
Dave Rodgman25d77cb2023-06-24 22:58:51 +010085 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
86#endif
87#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
88 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
89#endif
90#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
91 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
92#endif
93#if defined(MBEDTLS_CHACHA20_C)
94 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
95#endif
96#if defined(MBEDTLS_CHACHAPOLY_C)
97 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
98#endif
99#if defined(MBEDTLS_DES_C)
100 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
101#endif
102#if defined(MBEDTLS_DES_C)
103 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
104#endif
105#if defined(MBEDTLS_DES_C)
106 MBEDTLS_CIPHER_BASE_INDEX_DES,
107#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200108#if (defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)) || \
109 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100110 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
111#endif
112#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
113 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
114#endif
115#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
116 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
117#endif
118#if defined(MBEDTLS_NIST_KW_C)
119 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
120#endif
121#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
122 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
123#endif
124#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100125 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100126#endif
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100127 /* Prevent compile failure due to empty enum */
Dave Rodgmane3330f82023-08-14 15:26:28 +0100128 MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100129};
Dave Rodgmande3de772023-06-24 12:51:06 +0100130
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200131#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200132/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100133static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200134{
Gilles Peskine449bd832023-01-11 14:50:10 +0100135 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200136
Gilles Peskine449bd832023-01-11 14:50:10 +0100137 if (ctx != NULL) {
138 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
139 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200140
Gilles Peskine449bd832023-01-11 14:50:10 +0100141 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200142}
143
Gilles Peskine449bd832023-01-11 14:50:10 +0100144static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200145{
Gilles Peskine449bd832023-01-11 14:50:10 +0100146 mbedtls_gcm_free(ctx);
147 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200148}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200149#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200150
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200151#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200152/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100153static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200154{
Gilles Peskine449bd832023-01-11 14:50:10 +0100155 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200156
Gilles Peskine449bd832023-01-11 14:50:10 +0100157 if (ctx != NULL) {
158 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
159 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200160
Gilles Peskine449bd832023-01-11 14:50:10 +0100161 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200162}
163
Gilles Peskine449bd832023-01-11 14:50:10 +0100164static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200165{
Gilles Peskine449bd832023-01-11 14:50:10 +0100166 mbedtls_ccm_free(ctx);
167 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200168}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200169#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200170
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200171#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000172
Gilles Peskine449bd832023-01-11 14:50:10 +0100173static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
174 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200175{
Gilles Peskine449bd832023-01-11 14:50:10 +0100176 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200177}
178
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200179#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100180static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
181 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000182{
Gilles Peskine449bd832023-01-11 14:50:10 +0100183 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
184 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000185}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200186#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000187
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200188#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100189static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
190 size_t length, size_t *iv_off, unsigned char *iv,
191 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000192{
Gilles Peskine449bd832023-01-11 14:50:10 +0100193 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
194 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000195}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200196#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000197
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100198#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100199static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
200 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100201{
Gilles Peskine449bd832023-01-11 14:50:10 +0100202 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
203 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100204}
205#endif /* MBEDTLS_CIPHER_MODE_OFB */
206
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200207#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100208static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
209 unsigned char *nonce_counter, unsigned char *stream_block,
210 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000211{
Gilles Peskine449bd832023-01-11 14:50:10 +0100212 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
213 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000214}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200215#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000216
Jaeden Ameroc6539902018-04-30 17:17:41 +0100217#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100218static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
219 size_t length,
220 const unsigned char data_unit[16],
221 const unsigned char *input,
222 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100223{
224 mbedtls_aes_xts_context *xts_ctx = ctx;
225 int mode;
226
Gilles Peskine449bd832023-01-11 14:50:10 +0100227 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100228 case MBEDTLS_ENCRYPT:
229 mode = MBEDTLS_AES_ENCRYPT;
230 break;
231 case MBEDTLS_DECRYPT:
232 mode = MBEDTLS_AES_DECRYPT;
233 break;
234 default:
235 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
236 }
237
Gilles Peskine449bd832023-01-11 14:50:10 +0100238 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
239 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100240}
241#endif /* MBEDTLS_CIPHER_MODE_XTS */
242
Gilles Peskine449bd832023-01-11 14:50:10 +0100243static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
244 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000245{
Gilles Peskine449bd832023-01-11 14:50:10 +0100246 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000247}
248
Gilles Peskine449bd832023-01-11 14:50:10 +0100249static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
250 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000251{
Gilles Peskine449bd832023-01-11 14:50:10 +0100252 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000253}
254
Gilles Peskine449bd832023-01-11 14:50:10 +0100255static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000256{
Gilles Peskine449bd832023-01-11 14:50:10 +0100257 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200258
Gilles Peskine449bd832023-01-11 14:50:10 +0100259 if (aes == NULL) {
260 return NULL;
261 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200262
Gilles Peskine449bd832023-01-11 14:50:10 +0100263 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200264
Gilles Peskine449bd832023-01-11 14:50:10 +0100265 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000266}
267
Gilles Peskine449bd832023-01-11 14:50:10 +0100268static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000269{
Gilles Peskine449bd832023-01-11 14:50:10 +0100270 mbedtls_aes_free((mbedtls_aes_context *) ctx);
271 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000272}
273
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200274static const mbedtls_cipher_base_t aes_info = {
275 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200276 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200277#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000278 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100279#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200280#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000281 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100282#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100283#if defined(MBEDTLS_CIPHER_MODE_OFB)
284 aes_crypt_ofb_wrap,
285#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200286#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000287 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100288#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100289#if defined(MBEDTLS_CIPHER_MODE_XTS)
290 NULL,
291#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200292#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200293 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100294#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000295 aes_setkey_enc_wrap,
296 aes_setkey_dec_wrap,
297 aes_ctx_alloc,
298 aes_ctx_free
299};
300
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200301static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100302 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100303 16,
304 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100305 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100306 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100307 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200308 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100309 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200310};
311
Yanray Wang7732ced2023-09-14 13:51:14 +0800312#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200313static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100314 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100315 16,
316 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100317 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100318 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100319 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200320 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100321 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200322};
323
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200324static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100325 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100326 16,
327 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100328 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100329 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100330 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200331 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100332 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200333};
Yanray Wang7732ced2023-09-14 13:51:14 +0800334#endif
Paul Bakker5e0efa72013-09-08 23:04:04 +0200335
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200336#if defined(MBEDTLS_CIPHER_MODE_CBC)
337static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100338 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100339 16,
340 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100341 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100342 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100343 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200344 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100345 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000346};
347
Yanray Wang7732ced2023-09-14 13:51:14 +0800348#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200349static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100350 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100351 16,
352 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100353 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100354 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100355 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200356 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100357 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000358};
359
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200360static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100361 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100362 16,
363 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100364 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100365 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100366 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200367 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100368 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000369};
Yanray Wang7732ced2023-09-14 13:51:14 +0800370#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200371#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000372
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200373#if defined(MBEDTLS_CIPHER_MODE_CFB)
374static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100375 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100376 16,
377 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100378 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100379 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100380 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200381 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100382 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000383};
384
Yanray Wang7732ced2023-09-14 13:51:14 +0800385#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200386static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100387 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100388 16,
389 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100390 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100391 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100392 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200393 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100394 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000395};
396
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200397static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100398 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100399 16,
400 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100401 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100402 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100403 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200404 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100405 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000406};
Yanray Wang7732ced2023-09-14 13:51:14 +0800407#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200408#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000409
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100410#if defined(MBEDTLS_CIPHER_MODE_OFB)
411static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100412 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100413 16,
414 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100415 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100416 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100417 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100418 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100419 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100420};
421
Yanray Wang7732ced2023-09-14 13:51:14 +0800422#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100423static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100424 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100425 16,
426 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100427 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100428 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100429 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100430 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100431 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100432};
433
434static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100435 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100436 16,
437 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100438 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100439 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100440 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100441 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100442 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100443};
Yanray Wang7732ced2023-09-14 13:51:14 +0800444#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100445#endif /* MBEDTLS_CIPHER_MODE_OFB */
446
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200447#if defined(MBEDTLS_CIPHER_MODE_CTR)
448static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100449 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100450 16,
451 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100452 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100453 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100454 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200455 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100456 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000457};
458
Yanray Wang7732ced2023-09-14 13:51:14 +0800459#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200460static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100461 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100462 16,
463 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100464 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100465 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100466 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200467 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100468 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000469};
470
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200471static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100472 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100473 16,
474 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100475 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100476 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100477 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200478 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100479 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000480};
Yanray Wang7732ced2023-09-14 13:51:14 +0800481#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200482#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000483
Jaeden Ameroc6539902018-04-30 17:17:41 +0100484#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100485static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
486 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100487{
488 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100489 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100490}
491
Gilles Peskine449bd832023-01-11 14:50:10 +0100492static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
493 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100494{
495 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100496 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100497}
498
Gilles Peskine449bd832023-01-11 14:50:10 +0100499static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100500{
Gilles Peskine449bd832023-01-11 14:50:10 +0100501 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100502
Gilles Peskine449bd832023-01-11 14:50:10 +0100503 if (xts_ctx != NULL) {
504 mbedtls_aes_xts_init(xts_ctx);
505 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100506
Gilles Peskine449bd832023-01-11 14:50:10 +0100507 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100508}
509
Gilles Peskine449bd832023-01-11 14:50:10 +0100510static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100511{
512 mbedtls_aes_xts_context *xts_ctx = ctx;
513
Gilles Peskine449bd832023-01-11 14:50:10 +0100514 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100515 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100516 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100517
Gilles Peskine449bd832023-01-11 14:50:10 +0100518 mbedtls_aes_xts_free(xts_ctx);
519 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100520}
521
522static const mbedtls_cipher_base_t xts_aes_info = {
523 MBEDTLS_CIPHER_ID_AES,
524 NULL,
525#if defined(MBEDTLS_CIPHER_MODE_CBC)
526 NULL,
527#endif
528#if defined(MBEDTLS_CIPHER_MODE_CFB)
529 NULL,
530#endif
531#if defined(MBEDTLS_CIPHER_MODE_OFB)
532 NULL,
533#endif
534#if defined(MBEDTLS_CIPHER_MODE_CTR)
535 NULL,
536#endif
537#if defined(MBEDTLS_CIPHER_MODE_XTS)
538 aes_crypt_xts_wrap,
539#endif
540#if defined(MBEDTLS_CIPHER_MODE_STREAM)
541 NULL,
542#endif
543 xts_aes_setkey_enc_wrap,
544 xts_aes_setkey_dec_wrap,
545 xts_aes_ctx_alloc,
546 xts_aes_ctx_free
547};
548
549static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100550 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100551 16,
552 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100553 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100554 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100555 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100556 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100557 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100558};
559
Yanray Wang7732ced2023-09-14 13:51:14 +0800560#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100561static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100562 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100563 16,
564 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100565 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100566 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100567 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100568 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100569 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100570};
Yanray Wang7732ced2023-09-14 13:51:14 +0800571#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100572#endif /* MBEDTLS_CIPHER_MODE_XTS */
573
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200574#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100575static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
576 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200577{
Gilles Peskine449bd832023-01-11 14:50:10 +0100578 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
579 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200580}
Valerio Settid4a10ce2023-10-03 15:11:48 +0200581#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200582
Valerio Settid4a10ce2023-10-03 15:11:48 +0200583#if defined(MBEDTLS_GCM_C) || \
584 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200585static const mbedtls_cipher_base_t gcm_aes_info = {
586 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200587 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200588#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200589 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100590#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200591#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200592 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100593#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100594#if defined(MBEDTLS_CIPHER_MODE_OFB)
595 NULL,
596#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200597#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200598 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100599#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100600#if defined(MBEDTLS_CIPHER_MODE_XTS)
601 NULL,
602#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200603#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200604 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100605#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200606#if defined(MBEDTLS_GCM_C)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200607 gcm_aes_setkey_wrap,
608 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200609 gcm_ctx_alloc,
610 gcm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200611#else
612 NULL,
613 NULL,
614 NULL,
615 NULL,
616#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200617};
Valerio Settid4a10ce2023-10-03 15:11:48 +0200618#endif /* MBEDTLS_GCM_C || (MBEDTLS_USE_PSA_CRYPTO && PSA_WANT_ALG_GCM) */
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200619
Valerio Settid4a10ce2023-10-03 15:11:48 +0200620#if defined(MBEDTLS_GCM_C) || \
621 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200622static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100623 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100624 16,
625 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100626 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100627 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100628 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200629 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100630 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100631};
632
Yanray Wang7732ced2023-09-14 13:51:14 +0800633#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200634static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100635 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100636 16,
637 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100638 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100639 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100640 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200641 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100642 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200643};
644
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200645static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100646 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100647 16,
648 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100649 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100650 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100651 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200652 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100653 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100654};
Yanray Wang7732ced2023-09-14 13:51:14 +0800655#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200656#endif /* MBEDTLS_GCM_C || PSA_WANT_ALG_GCM */
Paul Bakker68884e32013-01-07 18:20:04 +0100657
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200658#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100659static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
660 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200661{
Gilles Peskine449bd832023-01-11 14:50:10 +0100662 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
663 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200664}
Valerio Settid4a10ce2023-10-03 15:11:48 +0200665#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200666
Valerio Settid4a10ce2023-10-03 15:11:48 +0200667#if defined(MBEDTLS_CCM_C) || \
668 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200669static const mbedtls_cipher_base_t ccm_aes_info = {
670 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200671 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200672#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200673 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100674#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200675#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200676 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100677#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100678#if defined(MBEDTLS_CIPHER_MODE_OFB)
679 NULL,
680#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200681#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200682 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100683#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100684#if defined(MBEDTLS_CIPHER_MODE_XTS)
685 NULL,
686#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200687#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200688 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100689#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200690#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200691 ccm_aes_setkey_wrap,
692 ccm_aes_setkey_wrap,
693 ccm_ctx_alloc,
694 ccm_ctx_free,
Valerio Settid4a10ce2023-10-03 15:11:48 +0200695#else
696 NULL,
697 NULL,
698 NULL,
699 NULL,
700#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200701};
Valerio Settid4a10ce2023-10-03 15:11:48 +0200702#endif /* MBEDTLS_CCM_C || (MBEDTLS_USE_PSA_CRYPTO && PSA_WANT_ALG_CCM) */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200703
Valerio Settid4a10ce2023-10-03 15:11:48 +0200704#if defined(MBEDTLS_CCM_C) || \
705 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200706static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100707 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100708 16,
709 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100710 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100711 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100712 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200713 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100714 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200715};
716
Yanray Wang7732ced2023-09-14 13:51:14 +0800717#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200718static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100719 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100720 16,
721 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100722 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100723 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100724 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200725 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100726 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200727};
728
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200729static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100730 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100731 16,
732 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100733 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100734 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100735 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200736 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100737 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200738};
Yanray Wang7732ced2023-09-14 13:51:14 +0800739#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200740#endif /* MBEDTLS_CCM_C || PSA_WANT_ALG_CCM */
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200741
Valerio Settid4a10ce2023-10-03 15:11:48 +0200742#if defined(MBEDTLS_CCM_C) || \
743 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM_STAR_NO_TAG))
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200744static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100745 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100746 16,
747 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100748 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100749 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100750 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200751 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100752 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200753};
754
Yanray Wang7732ced2023-09-14 13:51:14 +0800755#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200756static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100757 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100758 16,
759 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100760 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100761 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100762 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200763 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100764 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200765};
766
767static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100768 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100769 16,
770 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100771 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100772 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100773 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200774 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100775 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200776};
Yanray Wang7732ced2023-09-14 13:51:14 +0800777#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +0200778#endif /* MBEDTLS_CCM_C || PSA_WANT_ALG_CCM_STAR_NO_TAG */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200779
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200780#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000781
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200782#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000783
Gilles Peskine449bd832023-01-11 14:50:10 +0100784static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
785 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200786{
Gilles Peskine449bd832023-01-11 14:50:10 +0100787 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
788 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200789}
790
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200791#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100792static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
793 size_t length, unsigned char *iv,
794 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000795{
Gilles Peskine449bd832023-01-11 14:50:10 +0100796 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
797 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000798}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200799#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000800
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200801#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100802static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
803 size_t length, size_t *iv_off, unsigned char *iv,
804 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000805{
Gilles Peskine449bd832023-01-11 14:50:10 +0100806 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
807 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000808}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200809#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000810
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200811#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100812static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
813 unsigned char *nonce_counter, unsigned char *stream_block,
814 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000815{
Gilles Peskine449bd832023-01-11 14:50:10 +0100816 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
817 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000818}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200819#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000820
Gilles Peskine449bd832023-01-11 14:50:10 +0100821static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
822 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000823{
Gilles Peskine449bd832023-01-11 14:50:10 +0100824 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000825}
826
Gilles Peskine449bd832023-01-11 14:50:10 +0100827static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
828 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000829{
Gilles Peskine449bd832023-01-11 14:50:10 +0100830 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000831}
832
Gilles Peskine449bd832023-01-11 14:50:10 +0100833static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000834{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200835 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100836 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200837
Gilles Peskine449bd832023-01-11 14:50:10 +0100838 if (ctx == NULL) {
839 return NULL;
840 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200841
Gilles Peskine449bd832023-01-11 14:50:10 +0100842 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200843
Gilles Peskine449bd832023-01-11 14:50:10 +0100844 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000845}
846
Gilles Peskine449bd832023-01-11 14:50:10 +0100847static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000848{
Gilles Peskine449bd832023-01-11 14:50:10 +0100849 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
850 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000851}
852
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200853static const mbedtls_cipher_base_t camellia_info = {
854 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200855 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200856#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000857 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100858#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200859#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000860 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100861#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100862#if defined(MBEDTLS_CIPHER_MODE_OFB)
863 NULL,
864#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200865#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000866 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100867#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100868#if defined(MBEDTLS_CIPHER_MODE_XTS)
869 NULL,
870#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200871#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200872 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100873#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000874 camellia_setkey_enc_wrap,
875 camellia_setkey_dec_wrap,
876 camellia_ctx_alloc,
877 camellia_ctx_free
878};
879
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200880static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100881 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100882 16,
883 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100884 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100885 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100886 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200887 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100888 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200889};
890
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200891static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100892 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100893 16,
894 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100895 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100896 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100897 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200898 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100899 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200900};
901
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200902static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100903 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100904 16,
905 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100906 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100907 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100908 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200909 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100910 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200911};
912
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200913#if defined(MBEDTLS_CIPHER_MODE_CBC)
914static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100915 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100916 16,
917 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100918 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100919 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100920 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200921 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100922 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000923};
924
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200925static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100926 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100927 16,
928 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100929 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100930 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100931 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200932 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100933 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000934};
935
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200936static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100937 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100938 16,
939 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100940 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100941 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100942 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200943 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100944 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000945};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200946#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000947
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200948#if defined(MBEDTLS_CIPHER_MODE_CFB)
949static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100950 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100951 16,
952 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100953 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100954 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100955 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200956 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100957 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000958};
959
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200960static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100961 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100962 16,
963 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100964 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100965 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100966 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200967 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100968 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000969};
970
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200971static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100972 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100973 16,
974 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100975 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100976 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100977 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200978 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100979 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000980};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200981#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000982
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200983#if defined(MBEDTLS_CIPHER_MODE_CTR)
984static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100985 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100986 16,
987 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100988 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100989 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100990 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200991 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100992 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000993};
994
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200995static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100996 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100997 16,
998 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100999 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001000 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001001 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001002 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001003 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +00001004};
1005
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001006static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001007 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001008 16,
1009 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001010 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001011 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001012 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001013 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001014 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +00001015};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001016#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +00001017
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001018#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001019static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1020 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001021{
Gilles Peskine449bd832023-01-11 14:50:10 +01001022 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1023 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001024}
1025
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001026static const mbedtls_cipher_base_t gcm_camellia_info = {
1027 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001028 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001029#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001030 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001031#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001032#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001033 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001034#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001035#if defined(MBEDTLS_CIPHER_MODE_OFB)
1036 NULL,
1037#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001038#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001039 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001040#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001041#if defined(MBEDTLS_CIPHER_MODE_XTS)
1042 NULL,
1043#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001044#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001045 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001046#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001047 gcm_camellia_setkey_wrap,
1048 gcm_camellia_setkey_wrap,
1049 gcm_ctx_alloc,
1050 gcm_ctx_free,
1051};
1052
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001053static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001054 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001055 16,
1056 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001057 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001058 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001059 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001060 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001061 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001062};
1063
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001064static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001065 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001066 16,
1067 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001068 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001069 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001070 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001071 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001072 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001073};
1074
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001075static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001076 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001077 16,
1078 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001079 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001080 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001081 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001082 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001083 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001084};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001085#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001086
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001087#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001088static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1089 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001090{
Gilles Peskine449bd832023-01-11 14:50:10 +01001091 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1092 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001093}
1094
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001095static const mbedtls_cipher_base_t ccm_camellia_info = {
1096 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001097 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001098#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001099 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001100#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001101#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001102 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001103#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001104#if defined(MBEDTLS_CIPHER_MODE_OFB)
1105 NULL,
1106#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001107#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001108 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001109#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001110#if defined(MBEDTLS_CIPHER_MODE_XTS)
1111 NULL,
1112#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001113#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001114 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001115#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001116 ccm_camellia_setkey_wrap,
1117 ccm_camellia_setkey_wrap,
1118 ccm_ctx_alloc,
1119 ccm_ctx_free,
1120};
1121
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001122static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001123 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001124 16,
1125 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001126 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001127 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001128 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001129 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001130 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001131};
1132
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001133static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001134 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001135 16,
1136 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001137 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001138 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001139 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001140 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001141 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001142};
1143
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001144static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001145 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001146 16,
1147 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001148 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001149 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001150 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001151 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001152 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001153};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001154
1155static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001156 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001157 16,
1158 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001159 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001160 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001161 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001162 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001163 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001164};
1165
1166static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001167 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001168 16,
1169 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001170 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001171 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001172 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001173 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001174 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001175};
1176
1177static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001178 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001179 16,
1180 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001181 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001182 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001183 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001184 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001185 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001186};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001187#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001188
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001189#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001190
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001191#if defined(MBEDTLS_ARIA_C)
1192
Gilles Peskine449bd832023-01-11 14:50:10 +01001193static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1194 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001195{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001196 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001197 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1198 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001199}
1200
1201#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001202static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1203 size_t length, unsigned char *iv,
1204 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001205{
Gilles Peskine449bd832023-01-11 14:50:10 +01001206 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1207 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001208}
1209#endif /* MBEDTLS_CIPHER_MODE_CBC */
1210
1211#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001212static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1213 size_t length, size_t *iv_off, unsigned char *iv,
1214 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001215{
Gilles Peskine449bd832023-01-11 14:50:10 +01001216 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1217 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001218}
1219#endif /* MBEDTLS_CIPHER_MODE_CFB */
1220
1221#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001222static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1223 unsigned char *nonce_counter, unsigned char *stream_block,
1224 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001225{
Gilles Peskine449bd832023-01-11 14:50:10 +01001226 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1227 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001228}
1229#endif /* MBEDTLS_CIPHER_MODE_CTR */
1230
Gilles Peskine449bd832023-01-11 14:50:10 +01001231static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1232 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001233{
Gilles Peskine449bd832023-01-11 14:50:10 +01001234 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001235}
1236
Gilles Peskine449bd832023-01-11 14:50:10 +01001237static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1238 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001239{
Gilles Peskine449bd832023-01-11 14:50:10 +01001240 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001241}
1242
Gilles Peskine449bd832023-01-11 14:50:10 +01001243static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001244{
1245 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001246 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001247
Gilles Peskine449bd832023-01-11 14:50:10 +01001248 if (ctx == NULL) {
1249 return NULL;
1250 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001251
Gilles Peskine449bd832023-01-11 14:50:10 +01001252 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001253
Gilles Peskine449bd832023-01-11 14:50:10 +01001254 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001255}
1256
Gilles Peskine449bd832023-01-11 14:50:10 +01001257static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001258{
Gilles Peskine449bd832023-01-11 14:50:10 +01001259 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1260 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001261}
1262
1263static const mbedtls_cipher_base_t aria_info = {
1264 MBEDTLS_CIPHER_ID_ARIA,
1265 aria_crypt_ecb_wrap,
1266#if defined(MBEDTLS_CIPHER_MODE_CBC)
1267 aria_crypt_cbc_wrap,
1268#endif
1269#if defined(MBEDTLS_CIPHER_MODE_CFB)
1270 aria_crypt_cfb128_wrap,
1271#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001272#if defined(MBEDTLS_CIPHER_MODE_OFB)
1273 NULL,
1274#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001275#if defined(MBEDTLS_CIPHER_MODE_CTR)
1276 aria_crypt_ctr_wrap,
1277#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001278#if defined(MBEDTLS_CIPHER_MODE_XTS)
1279 NULL,
1280#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001281#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1282 NULL,
1283#endif
1284 aria_setkey_enc_wrap,
1285 aria_setkey_dec_wrap,
1286 aria_ctx_alloc,
1287 aria_ctx_free
1288};
1289
1290static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001291 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001292 16,
1293 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001294 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001295 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001296 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001297 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001298 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001299};
1300
1301static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001302 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001303 16,
1304 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001305 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001306 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001307 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001308 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001309 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001310};
1311
1312static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001313 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001314 16,
1315 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001316 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001317 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001318 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001319 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001320 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001321};
1322
1323#if defined(MBEDTLS_CIPHER_MODE_CBC)
1324static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001325 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001326 16,
1327 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001328 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001329 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001330 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001331 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001332 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001333};
1334
1335static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001336 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001337 16,
1338 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001339 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001340 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001341 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001342 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001343 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001344};
1345
1346static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001347 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001348 16,
1349 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001350 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001351 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001352 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001353 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001354 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001355};
1356#endif /* MBEDTLS_CIPHER_MODE_CBC */
1357
1358#if defined(MBEDTLS_CIPHER_MODE_CFB)
1359static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001360 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001361 16,
1362 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001363 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001364 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001365 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001366 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001367 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001368};
1369
1370static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001371 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001372 16,
1373 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001374 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001375 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001376 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001377 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001378 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001379};
1380
1381static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001382 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001383 16,
1384 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001385 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001386 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001387 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001388 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001389 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001390};
1391#endif /* MBEDTLS_CIPHER_MODE_CFB */
1392
1393#if defined(MBEDTLS_CIPHER_MODE_CTR)
1394static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001395 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001396 16,
1397 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001398 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001399 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001400 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001401 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001402 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001403};
1404
1405static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001406 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001407 16,
1408 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001409 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001410 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001411 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001412 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001413 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001414};
1415
1416static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001417 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001418 16,
1419 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001420 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001421 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001422 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001423 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001424 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001425};
1426#endif /* MBEDTLS_CIPHER_MODE_CTR */
1427
1428#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001429static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1430 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001431{
Gilles Peskine449bd832023-01-11 14:50:10 +01001432 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1433 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001434}
1435
1436static const mbedtls_cipher_base_t gcm_aria_info = {
1437 MBEDTLS_CIPHER_ID_ARIA,
1438 NULL,
1439#if defined(MBEDTLS_CIPHER_MODE_CBC)
1440 NULL,
1441#endif
1442#if defined(MBEDTLS_CIPHER_MODE_CFB)
1443 NULL,
1444#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001445#if defined(MBEDTLS_CIPHER_MODE_OFB)
1446 NULL,
1447#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001448#if defined(MBEDTLS_CIPHER_MODE_CTR)
1449 NULL,
1450#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001451#if defined(MBEDTLS_CIPHER_MODE_XTS)
1452 NULL,
1453#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001454#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1455 NULL,
1456#endif
1457 gcm_aria_setkey_wrap,
1458 gcm_aria_setkey_wrap,
1459 gcm_ctx_alloc,
1460 gcm_ctx_free,
1461};
1462
1463static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001464 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001465 16,
1466 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001467 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001468 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001469 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001470 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001471 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001472};
1473
1474static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001475 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001476 16,
1477 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001478 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001479 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001480 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001481 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001482 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001483};
1484
1485static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001486 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001487 16,
1488 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001489 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001490 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001491 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001492 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001493 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001494};
1495#endif /* MBEDTLS_GCM_C */
1496
1497#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001498static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1499 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001500{
Gilles Peskine449bd832023-01-11 14:50:10 +01001501 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1502 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001503}
1504
1505static const mbedtls_cipher_base_t ccm_aria_info = {
1506 MBEDTLS_CIPHER_ID_ARIA,
1507 NULL,
1508#if defined(MBEDTLS_CIPHER_MODE_CBC)
1509 NULL,
1510#endif
1511#if defined(MBEDTLS_CIPHER_MODE_CFB)
1512 NULL,
1513#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001514#if defined(MBEDTLS_CIPHER_MODE_OFB)
1515 NULL,
1516#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001517#if defined(MBEDTLS_CIPHER_MODE_CTR)
1518 NULL,
1519#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001520#if defined(MBEDTLS_CIPHER_MODE_XTS)
1521 NULL,
1522#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001523#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1524 NULL,
1525#endif
1526 ccm_aria_setkey_wrap,
1527 ccm_aria_setkey_wrap,
1528 ccm_ctx_alloc,
1529 ccm_ctx_free,
1530};
1531
1532static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001533 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001534 16,
1535 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001536 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001537 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001538 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001539 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001540 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001541};
1542
1543static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001544 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001545 16,
1546 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001547 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001548 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001549 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001550 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001551 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001552};
1553
1554static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001555 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001556 16,
1557 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001558 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001559 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001560 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001561 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001562 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001563};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001564
1565static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001566 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001567 16,
1568 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001569 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001570 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001571 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001572 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001573 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001574};
1575
1576static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001577 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001578 16,
1579 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001580 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001581 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001582 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001583 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001584 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001585};
1586
1587static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001588 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001589 16,
1590 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001591 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001592 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001593 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001594 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001595 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001596};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001597#endif /* MBEDTLS_CCM_C */
1598
1599#endif /* MBEDTLS_ARIA_C */
1600
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001601#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001602
Gilles Peskine449bd832023-01-11 14:50:10 +01001603static int des_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_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001608}
1609
Gilles Peskine449bd832023-01-11 14:50:10 +01001610static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1611 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001612{
1613 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001614 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001615}
1616
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001617#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001618static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1619 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001620{
Gilles Peskine449bd832023-01-11 14:50:10 +01001621 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1622 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001623}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001624#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001625
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001626#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001627static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1628 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001629{
Gilles Peskine449bd832023-01-11 14:50:10 +01001630 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1631 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001632}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001633#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001634
Gilles Peskine449bd832023-01-11 14:50:10 +01001635static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1636 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001637{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001638 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001639
Gilles Peskine449bd832023-01-11 14:50:10 +01001640 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001641}
1642
Gilles Peskine449bd832023-01-11 14:50:10 +01001643static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1644 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001645{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001646 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001647
Gilles Peskine449bd832023-01-11 14:50:10 +01001648 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001649}
1650
Gilles Peskine449bd832023-01-11 14:50:10 +01001651static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1652 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001653{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001654 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001655
Gilles Peskine449bd832023-01-11 14:50:10 +01001656 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001657}
1658
Gilles Peskine449bd832023-01-11 14:50:10 +01001659static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1660 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001661{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001662 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001663
Gilles Peskine449bd832023-01-11 14:50:10 +01001664 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001665}
1666
Gilles Peskine449bd832023-01-11 14:50:10 +01001667static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1668 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001669{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001670 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001671
Gilles Peskine449bd832023-01-11 14:50:10 +01001672 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001673}
1674
Gilles Peskine449bd832023-01-11 14:50:10 +01001675static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1676 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001677{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001678 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001679
Gilles Peskine449bd832023-01-11 14:50:10 +01001680 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001681}
1682
Gilles Peskine449bd832023-01-11 14:50:10 +01001683static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001684{
Gilles Peskine449bd832023-01-11 14:50:10 +01001685 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001686
Gilles Peskine449bd832023-01-11 14:50:10 +01001687 if (des == NULL) {
1688 return NULL;
1689 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001690
Gilles Peskine449bd832023-01-11 14:50:10 +01001691 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001692
Gilles Peskine449bd832023-01-11 14:50:10 +01001693 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001694}
1695
Gilles Peskine449bd832023-01-11 14:50:10 +01001696static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001697{
Gilles Peskine449bd832023-01-11 14:50:10 +01001698 mbedtls_des_free((mbedtls_des_context *) ctx);
1699 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001700}
1701
Gilles Peskine449bd832023-01-11 14:50:10 +01001702static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001703{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001704 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001705 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001706
Gilles Peskine449bd832023-01-11 14:50:10 +01001707 if (des3 == NULL) {
1708 return NULL;
1709 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001710
Gilles Peskine449bd832023-01-11 14:50:10 +01001711 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001712
Gilles Peskine449bd832023-01-11 14:50:10 +01001713 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001714}
1715
Gilles Peskine449bd832023-01-11 14:50:10 +01001716static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001717{
Gilles Peskine449bd832023-01-11 14:50:10 +01001718 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1719 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001720}
1721
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001722static const mbedtls_cipher_base_t des_info = {
1723 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001724 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001725#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001726 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001727#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001728#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001729 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001730#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001731#if defined(MBEDTLS_CIPHER_MODE_OFB)
1732 NULL,
1733#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001734#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001735 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001736#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001737#if defined(MBEDTLS_CIPHER_MODE_XTS)
1738 NULL,
1739#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001740#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001741 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001742#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001743 des_setkey_enc_wrap,
1744 des_setkey_dec_wrap,
1745 des_ctx_alloc,
1746 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001747};
1748
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001749static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001750 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001751 8,
1752 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001753 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001754 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001755 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001756 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001757 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001758};
1759
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001760#if defined(MBEDTLS_CIPHER_MODE_CBC)
1761static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001762 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001763 8,
1764 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001765 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001766 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001767 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001768 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001769 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001770};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001771#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001772
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001773static const mbedtls_cipher_base_t des_ede_info = {
1774 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001775 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001776#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001777 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001778#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001779#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001780 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001781#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001782#if defined(MBEDTLS_CIPHER_MODE_OFB)
1783 NULL,
1784#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001785#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001786 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001787#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001788#if defined(MBEDTLS_CIPHER_MODE_XTS)
1789 NULL,
1790#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001791#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001792 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001793#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001794 des3_set2key_enc_wrap,
1795 des3_set2key_dec_wrap,
1796 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001797 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001798};
1799
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001800static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001801 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001802 8,
1803 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001804 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001805 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001806 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001807 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001808 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001809};
1810
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001811#if defined(MBEDTLS_CIPHER_MODE_CBC)
1812static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001813 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001814 8,
1815 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001816 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001817 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001818 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001819 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001820 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001821};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001822#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001823
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001824static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001825 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001826 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001827#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001828 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001829#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001830#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001831 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001832#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001833#if defined(MBEDTLS_CIPHER_MODE_OFB)
1834 NULL,
1835#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001836#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001837 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001838#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001839#if defined(MBEDTLS_CIPHER_MODE_XTS)
1840 NULL,
1841#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001842#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001843 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001844#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001845 des3_set3key_enc_wrap,
1846 des3_set3key_dec_wrap,
1847 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001848 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001849};
1850
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001851static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001852 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001853 8,
1854 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001855 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001856 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001857 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001858 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001859 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001860};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001861#if defined(MBEDTLS_CIPHER_MODE_CBC)
1862static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001863 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001864 8,
1865 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001866 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001867 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001868 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001869 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001870 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001871};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001872#endif /* MBEDTLS_CIPHER_MODE_CBC */
1873#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001874
Daniel Kingbd920622016-05-15 19:56:20 -03001875#if defined(MBEDTLS_CHACHA20_C)
1876
Gilles Peskine449bd832023-01-11 14:50:10 +01001877static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1878 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001879{
Gilles Peskine449bd832023-01-11 14:50:10 +01001880 if (key_bitlen != 256U) {
1881 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1882 }
Daniel Kingbd920622016-05-15 19:56:20 -03001883
Gilles Peskine449bd832023-01-11 14:50:10 +01001884 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1885 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1886 }
Daniel Kingbd920622016-05-15 19:56:20 -03001887
Gilles Peskine449bd832023-01-11 14:50:10 +01001888 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001889}
1890
Gilles Peskine449bd832023-01-11 14:50:10 +01001891static int chacha20_stream_wrap(void *ctx, size_t length,
1892 const unsigned char *input,
1893 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001894{
Janos Follath24eed8d2019-11-22 13:21:35 +00001895 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001896
Gilles Peskine449bd832023-01-11 14:50:10 +01001897 ret = mbedtls_chacha20_update(ctx, length, input, output);
1898 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1899 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1900 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001901
Gilles Peskine449bd832023-01-11 14:50:10 +01001902 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001903}
1904
Gilles Peskine449bd832023-01-11 14:50:10 +01001905static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001906{
1907 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001908 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001909
Gilles Peskine449bd832023-01-11 14:50:10 +01001910 if (ctx == NULL) {
1911 return NULL;
1912 }
Daniel Kingbd920622016-05-15 19:56:20 -03001913
Gilles Peskine449bd832023-01-11 14:50:10 +01001914 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001915
Gilles Peskine449bd832023-01-11 14:50:10 +01001916 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001917}
1918
Gilles Peskine449bd832023-01-11 14:50:10 +01001919static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001920{
Gilles Peskine449bd832023-01-11 14:50:10 +01001921 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1922 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001923}
1924
1925static const mbedtls_cipher_base_t chacha20_base_info = {
1926 MBEDTLS_CIPHER_ID_CHACHA20,
1927 NULL,
1928#if defined(MBEDTLS_CIPHER_MODE_CBC)
1929 NULL,
1930#endif
1931#if defined(MBEDTLS_CIPHER_MODE_CFB)
1932 NULL,
1933#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001934#if defined(MBEDTLS_CIPHER_MODE_OFB)
1935 NULL,
1936#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001937#if defined(MBEDTLS_CIPHER_MODE_CTR)
1938 NULL,
1939#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001940#if defined(MBEDTLS_CIPHER_MODE_XTS)
1941 NULL,
1942#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001943#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001944 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001945#endif
1946 chacha20_setkey_wrap,
1947 chacha20_setkey_wrap,
1948 chacha20_ctx_alloc,
1949 chacha20_ctx_free
1950};
1951static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001952 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001953 1,
1954 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001955 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001956 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001957 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001958 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001959 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001960};
1961#endif /* MBEDTLS_CHACHA20_C */
1962
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001963#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001964
Gilles Peskine449bd832023-01-11 14:50:10 +01001965static int chachapoly_setkey_wrap(void *ctx,
1966 const unsigned char *key,
1967 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001968{
Gilles Peskine449bd832023-01-11 14:50:10 +01001969 if (key_bitlen != 256U) {
1970 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1971 }
Daniel King8fe47012016-05-17 20:33:28 -03001972
Gilles Peskine449bd832023-01-11 14:50:10 +01001973 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1974 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1975 }
Daniel King8fe47012016-05-17 20:33:28 -03001976
Gilles Peskine449bd832023-01-11 14:50:10 +01001977 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001978}
1979
Gilles Peskine449bd832023-01-11 14:50:10 +01001980static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001981{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001982 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001983 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001984
Gilles Peskine449bd832023-01-11 14:50:10 +01001985 if (ctx == NULL) {
1986 return NULL;
1987 }
Daniel King8fe47012016-05-17 20:33:28 -03001988
Gilles Peskine449bd832023-01-11 14:50:10 +01001989 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001990
Gilles Peskine449bd832023-01-11 14:50:10 +01001991 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001992}
1993
Gilles Peskine449bd832023-01-11 14:50:10 +01001994static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001995{
Gilles Peskine449bd832023-01-11 14:50:10 +01001996 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1997 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001998}
1999
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002000static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03002001 MBEDTLS_CIPHER_ID_CHACHA20,
2002 NULL,
2003#if defined(MBEDTLS_CIPHER_MODE_CBC)
2004 NULL,
2005#endif
2006#if defined(MBEDTLS_CIPHER_MODE_CFB)
2007 NULL,
2008#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002009#if defined(MBEDTLS_CIPHER_MODE_OFB)
2010 NULL,
2011#endif
Daniel King8fe47012016-05-17 20:33:28 -03002012#if defined(MBEDTLS_CIPHER_MODE_CTR)
2013 NULL,
2014#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002015#if defined(MBEDTLS_CIPHER_MODE_XTS)
2016 NULL,
2017#endif
Daniel King8fe47012016-05-17 20:33:28 -03002018#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2019 NULL,
2020#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002021 chachapoly_setkey_wrap,
2022 chachapoly_setkey_wrap,
2023 chachapoly_ctx_alloc,
2024 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002025};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002026static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002027 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002028 1,
2029 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002030 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002031 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002032 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002033 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002034 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002035};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002036#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002037
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002038#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002039static int null_crypt_stream(void *ctx, size_t length,
2040 const unsigned char *input,
2041 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002042{
2043 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002044 memmove(output, input, length);
2045 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002046}
2047
Gilles Peskine449bd832023-01-11 14:50:10 +01002048static int null_setkey(void *ctx, const unsigned char *key,
2049 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002050{
2051 ((void) ctx);
2052 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002053 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002054
Gilles Peskine449bd832023-01-11 14:50:10 +01002055 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002056}
2057
Gilles Peskine449bd832023-01-11 14:50:10 +01002058static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002059{
Gilles Peskine449bd832023-01-11 14:50:10 +01002060 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002061}
2062
Gilles Peskine449bd832023-01-11 14:50:10 +01002063static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002064{
2065 ((void) ctx);
2066}
2067
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002068static const mbedtls_cipher_base_t null_base_info = {
2069 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002070 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002071#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002072 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002073#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002074#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002075 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002076#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002077#if defined(MBEDTLS_CIPHER_MODE_OFB)
2078 NULL,
2079#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002080#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002081 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002082#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002083#if defined(MBEDTLS_CIPHER_MODE_XTS)
2084 NULL,
2085#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002086#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002087 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002088#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002089 null_setkey,
2090 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002091 null_ctx_alloc,
2092 null_ctx_free
2093};
2094
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002095static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002096 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002097 1,
2098 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002099 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002100 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002101 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002102 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002103 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002104};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002105#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002106
Jack Lloydffdf2882019-03-07 17:00:32 -05002107#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002108static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002109{
Gilles Peskine449bd832023-01-11 14:50:10 +01002110 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002111
Gilles Peskine449bd832023-01-11 14:50:10 +01002112 if (ctx != NULL) {
2113 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2114 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002115
Gilles Peskine449bd832023-01-11 14:50:10 +01002116 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002117}
2118
Gilles Peskine449bd832023-01-11 14:50:10 +01002119static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002120{
Gilles Peskine449bd832023-01-11 14:50:10 +01002121 mbedtls_nist_kw_free(ctx);
2122 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002123}
2124
Gilles Peskine449bd832023-01-11 14:50:10 +01002125static int kw_aes_setkey_wrap(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, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002130}
2131
Gilles Peskine449bd832023-01-11 14:50:10 +01002132static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2133 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002134{
Gilles Peskine449bd832023-01-11 14:50:10 +01002135 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2136 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002137}
2138
2139static const mbedtls_cipher_base_t kw_aes_info = {
2140 MBEDTLS_CIPHER_ID_AES,
2141 NULL,
2142#if defined(MBEDTLS_CIPHER_MODE_CBC)
2143 NULL,
2144#endif
2145#if defined(MBEDTLS_CIPHER_MODE_CFB)
2146 NULL,
2147#endif
2148#if defined(MBEDTLS_CIPHER_MODE_OFB)
2149 NULL,
2150#endif
2151#if defined(MBEDTLS_CIPHER_MODE_CTR)
2152 NULL,
2153#endif
2154#if defined(MBEDTLS_CIPHER_MODE_XTS)
2155 NULL,
2156#endif
2157#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2158 NULL,
2159#endif
2160 kw_aes_setkey_wrap,
2161 kw_aes_setkey_unwrap,
2162 kw_ctx_alloc,
2163 kw_ctx_free,
2164};
2165
2166static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002167 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002168 16,
2169 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002170 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002171 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002172 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002173 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002174 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002175};
2176
Yanray Wang7732ced2023-09-14 13:51:14 +08002177#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002178static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002179 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002180 16,
2181 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002182 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002183 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002184 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002185 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002186 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002187};
2188
2189static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002190 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002191 16,
2192 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002193 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002194 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002195 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002196 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002197 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002198};
Yanray Wang7732ced2023-09-14 13:51:14 +08002199#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002200
2201static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002202 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002203 16,
2204 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002205 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002206 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002207 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002208 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002209 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002210};
2211
Yanray Wang7732ced2023-09-14 13:51:14 +08002212#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002213static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002214 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002215 16,
2216 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002217 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002218 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002219 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002220 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002221 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002222};
2223
2224static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002225 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002226 16,
2227 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002228 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002229 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002230 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002231 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002232 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002233};
Yanray Wang7732ced2023-09-14 13:51:14 +08002234#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002235#endif /* MBEDTLS_NIST_KW_C */
2236
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002237const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002238{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002239#if defined(MBEDTLS_AES_C)
2240 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002241#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002242 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2243 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002244#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002245#if defined(MBEDTLS_CIPHER_MODE_CBC)
2246 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_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_CBC, &aes_192_cbc_info },
2249 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002250#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002251#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002252#if defined(MBEDTLS_CIPHER_MODE_CFB)
2253 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002254#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002255 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2256 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002257#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002258#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002259#if defined(MBEDTLS_CIPHER_MODE_OFB)
2260 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002261#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002262 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2263 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2264#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002265#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002266#if defined(MBEDTLS_CIPHER_MODE_CTR)
2267 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002268#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002269 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2270 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002271#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002272#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002273#if defined(MBEDTLS_CIPHER_MODE_XTS)
2274 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002275#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002276 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2277#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002278#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002279#if defined(MBEDTLS_GCM_C) || \
2280 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002281 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002282#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002283 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2284 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002285#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002286#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002287#if defined(MBEDTLS_CCM_C) || \
2288 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002289 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002290#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002291 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2292 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002293#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002294#endif
2295#if defined(MBEDTLS_CCM_C) || \
2296 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM_STAR_NO_TAG))
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002297 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002298#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002299 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2300 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002301#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002302#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002303#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002304
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002305#if defined(MBEDTLS_CAMELLIA_C)
2306 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2307 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2308 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2309#if defined(MBEDTLS_CIPHER_MODE_CBC)
2310 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2311 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2312 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_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_CIPHER_MODE_CFB)
2315 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2316 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2317 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002318#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002319#if defined(MBEDTLS_CIPHER_MODE_CTR)
2320 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2321 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2322 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002323#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002324#if defined(MBEDTLS_GCM_C)
2325 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2326 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2327 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002328#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002329#if defined(MBEDTLS_CCM_C)
2330 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2331 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2332 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002333 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2334 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2335 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002336#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002337#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002338
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002339#if defined(MBEDTLS_ARIA_C)
2340 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2341 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2342 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2343#if defined(MBEDTLS_CIPHER_MODE_CBC)
2344 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2345 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2346 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2347#endif
2348#if defined(MBEDTLS_CIPHER_MODE_CFB)
2349 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2350 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2351 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2352#endif
2353#if defined(MBEDTLS_CIPHER_MODE_CTR)
2354 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2355 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2356 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2357#endif
2358#if defined(MBEDTLS_GCM_C)
2359 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2360 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2361 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2362#endif
2363#if defined(MBEDTLS_CCM_C)
2364 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2365 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2366 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002367 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2368 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2369 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002370#endif
2371#endif /* MBEDTLS_ARIA_C */
2372
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002373#if defined(MBEDTLS_DES_C)
2374 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2375 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2376 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2377#if defined(MBEDTLS_CIPHER_MODE_CBC)
2378 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2379 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2380 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002381#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002382#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002383
Daniel Kingbd920622016-05-15 19:56:20 -03002384#if defined(MBEDTLS_CHACHA20_C)
2385 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2386#endif
2387
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002388#if defined(MBEDTLS_CHACHAPOLY_C)
2389 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002390#endif
2391
Jack Lloydffdf2882019-03-07 17:00:32 -05002392#if defined(MBEDTLS_NIST_KW_C)
2393 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002394#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002395 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2396 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002397#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002398 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002399#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002400 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2401 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2402#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002403#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002404
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002405#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2406 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2407#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002408
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002409 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002410};
2411
Gilles Peskine449bd832023-01-11 14:50:10 +01002412#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2413 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002414int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002415
Dave Rodgman3b46b772023-06-24 13:25:06 +01002416const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002417#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002418 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002419#endif
2420#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002421 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002422#endif
2423#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002424 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002425#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002426#if (defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)) || \
2427 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM) && defined(PSA_WANT_KEY_TYPE_AES))
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002428 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002429#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002430#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002431 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002432#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002433#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002434 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002435#endif
2436#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002437 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002438#endif
2439#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002440 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002441#endif
2442#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002443 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002444#endif
2445#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002446 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002447#endif
2448#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002449 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002450#endif
Valerio Settid4a10ce2023-10-03 15:11:48 +02002451#if (defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)) || \
2452 (defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM) && defined(PSA_WANT_KEY_TYPE_AES))
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002453 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002454#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002455#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002456 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002457#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002458#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002459 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002460#endif
2461#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002462 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002463#endif
2464#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002465 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002466#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002467#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002468 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002469#endif
2470};
2471
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002472#endif /* MBEDTLS_CIPHER_C */