blob: da4e739c878ec534b94c1417c1379d2c0fb819e8 [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 *
Manuel Pégourié-Gonnardb4fe3cb2015-01-22 16:11:05 +00004 * \brief Generic cipher wrapper for mbed TLS
Paul Bakker8123e9d2011-01-06 15:37:30 +00005 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
7 *
Bence Szépkúti1e148272020-08-07 13:07:28 +02008 * Copyright The Mbed TLS Contributors
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +02009 * SPDX-License-Identifier: Apache-2.0
10 *
11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
12 * not use this file except in compliance with the License.
13 * You may obtain a copy of the License at
14 *
15 * http://www.apache.org/licenses/LICENSE-2.0
16 *
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
Paul Bakker8123e9d2011-01-06 15:37:30 +000022 */
23
Gilles Peskinedb09ef62020-06-03 01:43:33 +020024#include "common.h"
Paul Bakker8123e9d2011-01-06 15:37:30 +000025
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020026#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000027
Chris Jonesdaacb592021-03-09 17:03:29 +000028#include "cipher_wrap.h"
Janos Follath24eed8d2019-11-22 13:21:35 +000029#include "mbedtls/error.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000030
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +020031#if defined(MBEDTLS_CHACHAPOLY_C)
32#include "mbedtls/chachapoly.h"
Daniel King8fe47012016-05-17 20:33:28 -030033#endif
34
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000036#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000037#endif
38
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020039#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000040#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000041#endif
42
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000043#if defined(MBEDTLS_ARIA_C)
44#include "mbedtls/aria.h"
45#endif
46
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000048#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000049#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000050
Daniel Kingbd920622016-05-15 19:56:20 -030051#if defined(MBEDTLS_CHACHA20_C)
52#include "mbedtls/chacha20.h"
53#endif
54
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000056#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020057#endif
58
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000060#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020061#endif
62
Jack Lloydffdf2882019-03-07 17:00:32 -050063#if defined(MBEDTLS_NIST_KW_C)
64#include "mbedtls/nist_kw.h"
65#endif
66
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000068#include <string.h>
69#endif
70
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000071#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020072
Dave Rodgman25d77cb2023-06-24 22:58:51 +010073enum mbedtls_cipher_base_index {
74#if defined(MBEDTLS_AES_C)
75 MBEDTLS_CIPHER_BASE_INDEX_AES,
76#endif
77#if defined(MBEDTLS_ARIA_C)
78 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
79#endif
80#if defined(MBEDTLS_CAMELLIA_C)
81 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
82#endif
83#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
84 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
85#endif
86#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
87 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
88#endif
89#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
90 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
91#endif
92#if defined(MBEDTLS_CHACHA20_C)
93 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
94#endif
95#if defined(MBEDTLS_CHACHAPOLY_C)
96 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
97#endif
98#if defined(MBEDTLS_DES_C)
99 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
100#endif
101#if defined(MBEDTLS_DES_C)
102 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
103#endif
104#if defined(MBEDTLS_DES_C)
105 MBEDTLS_CIPHER_BASE_INDEX_DES,
106#endif
107#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
108 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
109#endif
110#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
111 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
112#endif
113#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
114 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
115#endif
116#if defined(MBEDTLS_NIST_KW_C)
117 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
118#endif
119#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
120 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
121#endif
122#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
123 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
124#endif
125};
Dave Rodgmande3de772023-06-24 12:51:06 +0100126
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200127#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200128/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100129static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200130{
Gilles Peskine449bd832023-01-11 14:50:10 +0100131 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200132
Gilles Peskine449bd832023-01-11 14:50:10 +0100133 if (ctx != NULL) {
134 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
135 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200136
Gilles Peskine449bd832023-01-11 14:50:10 +0100137 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200138}
139
Gilles Peskine449bd832023-01-11 14:50:10 +0100140static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200141{
Gilles Peskine449bd832023-01-11 14:50:10 +0100142 mbedtls_gcm_free(ctx);
143 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200144}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200145#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200146
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200147#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200148/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100149static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200150{
Gilles Peskine449bd832023-01-11 14:50:10 +0100151 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200152
Gilles Peskine449bd832023-01-11 14:50:10 +0100153 if (ctx != NULL) {
154 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
155 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200156
Gilles Peskine449bd832023-01-11 14:50:10 +0100157 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200158}
159
Gilles Peskine449bd832023-01-11 14:50:10 +0100160static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200161{
Gilles Peskine449bd832023-01-11 14:50:10 +0100162 mbedtls_ccm_free(ctx);
163 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200164}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200165#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200166
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200167#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000168
Gilles Peskine449bd832023-01-11 14:50:10 +0100169static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
170 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200171{
Gilles Peskine449bd832023-01-11 14:50:10 +0100172 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200173}
174
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200175#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100176static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
177 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000178{
Gilles Peskine449bd832023-01-11 14:50:10 +0100179 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
180 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000181}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200182#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000183
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200184#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100185static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
186 size_t length, size_t *iv_off, unsigned char *iv,
187 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000188{
Gilles Peskine449bd832023-01-11 14:50:10 +0100189 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
190 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000191}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200192#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000193
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100194#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100195static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
196 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100197{
Gilles Peskine449bd832023-01-11 14:50:10 +0100198 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
199 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100200}
201#endif /* MBEDTLS_CIPHER_MODE_OFB */
202
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200203#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100204static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
205 unsigned char *nonce_counter, unsigned char *stream_block,
206 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000207{
Gilles Peskine449bd832023-01-11 14:50:10 +0100208 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
209 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000210}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200211#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000212
Jaeden Ameroc6539902018-04-30 17:17:41 +0100213#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100214static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
215 size_t length,
216 const unsigned char data_unit[16],
217 const unsigned char *input,
218 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100219{
220 mbedtls_aes_xts_context *xts_ctx = ctx;
221 int mode;
222
Gilles Peskine449bd832023-01-11 14:50:10 +0100223 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100224 case MBEDTLS_ENCRYPT:
225 mode = MBEDTLS_AES_ENCRYPT;
226 break;
227 case MBEDTLS_DECRYPT:
228 mode = MBEDTLS_AES_DECRYPT;
229 break;
230 default:
231 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
232 }
233
Gilles Peskine449bd832023-01-11 14:50:10 +0100234 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
235 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100236}
237#endif /* MBEDTLS_CIPHER_MODE_XTS */
238
Gilles Peskine449bd832023-01-11 14:50:10 +0100239static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
240 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000241{
Gilles Peskine449bd832023-01-11 14:50:10 +0100242 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000243}
244
Gilles Peskine449bd832023-01-11 14:50:10 +0100245static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
246 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000247{
Gilles Peskine449bd832023-01-11 14:50:10 +0100248 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000249}
250
Gilles Peskine449bd832023-01-11 14:50:10 +0100251static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000252{
Gilles Peskine449bd832023-01-11 14:50:10 +0100253 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200254
Gilles Peskine449bd832023-01-11 14:50:10 +0100255 if (aes == NULL) {
256 return NULL;
257 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200258
Gilles Peskine449bd832023-01-11 14:50:10 +0100259 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200260
Gilles Peskine449bd832023-01-11 14:50:10 +0100261 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000262}
263
Gilles Peskine449bd832023-01-11 14:50:10 +0100264static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000265{
Gilles Peskine449bd832023-01-11 14:50:10 +0100266 mbedtls_aes_free((mbedtls_aes_context *) ctx);
267 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000268}
269
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200270static const mbedtls_cipher_base_t aes_info = {
271 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200272 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200273#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000274 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100275#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200276#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000277 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100278#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100279#if defined(MBEDTLS_CIPHER_MODE_OFB)
280 aes_crypt_ofb_wrap,
281#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200282#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000283 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100284#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100285#if defined(MBEDTLS_CIPHER_MODE_XTS)
286 NULL,
287#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200288#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200289 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100290#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000291 aes_setkey_enc_wrap,
292 aes_setkey_dec_wrap,
293 aes_ctx_alloc,
294 aes_ctx_free
295};
296
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200297static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100298 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100299 16,
300 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100301 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100302 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100303 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200304 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100305 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200306};
307
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200308static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100309 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100310 16,
311 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100312 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100313 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100314 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200315 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100316 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200317};
318
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200319static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100320 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100321 16,
322 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100323 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100324 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100325 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200326 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100327 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200328};
329
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200330#if defined(MBEDTLS_CIPHER_MODE_CBC)
331static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100332 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100333 16,
334 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100335 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100336 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100337 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200338 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100339 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000340};
341
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200342static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100343 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100344 16,
345 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100346 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100347 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100348 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200349 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100350 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000351};
352
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200353static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100354 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100355 16,
356 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100357 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100358 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100359 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200360 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100361 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000362};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200363#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000364
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200365#if defined(MBEDTLS_CIPHER_MODE_CFB)
366static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100367 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100368 16,
369 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100370 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100371 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100372 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200373 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100374 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000375};
376
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200377static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100378 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100379 16,
380 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100381 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100382 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100383 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200384 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100385 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000386};
387
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200388static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100389 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100390 16,
391 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100392 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100393 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100394 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200395 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100396 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000397};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200398#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000399
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100400#if defined(MBEDTLS_CIPHER_MODE_OFB)
401static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100402 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100403 16,
404 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100405 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100406 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100407 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100408 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100409 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100410};
411
412static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100413 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100414 16,
415 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100416 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100417 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100418 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100419 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100420 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100421};
422
423static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100424 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100425 16,
426 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100427 256 >> 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_256_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#endif /* MBEDTLS_CIPHER_MODE_OFB */
434
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200435#if defined(MBEDTLS_CIPHER_MODE_CTR)
436static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100437 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100438 16,
439 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100440 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100441 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100442 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200443 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100444 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000445};
446
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200447static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100448 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100449 16,
450 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100451 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100452 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100453 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200454 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100455 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000456};
457
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200458static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100459 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100460 16,
461 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100462 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100463 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100464 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200465 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100466 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000467};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200468#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000469
Jaeden Ameroc6539902018-04-30 17:17:41 +0100470#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100471static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
472 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100473{
474 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100475 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100476}
477
Gilles Peskine449bd832023-01-11 14:50:10 +0100478static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
479 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100480{
481 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100482 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100483}
484
Gilles Peskine449bd832023-01-11 14:50:10 +0100485static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100486{
Gilles Peskine449bd832023-01-11 14:50:10 +0100487 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100488
Gilles Peskine449bd832023-01-11 14:50:10 +0100489 if (xts_ctx != NULL) {
490 mbedtls_aes_xts_init(xts_ctx);
491 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100492
Gilles Peskine449bd832023-01-11 14:50:10 +0100493 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100494}
495
Gilles Peskine449bd832023-01-11 14:50:10 +0100496static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100497{
498 mbedtls_aes_xts_context *xts_ctx = ctx;
499
Gilles Peskine449bd832023-01-11 14:50:10 +0100500 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100501 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100502 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100503
Gilles Peskine449bd832023-01-11 14:50:10 +0100504 mbedtls_aes_xts_free(xts_ctx);
505 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100506}
507
508static const mbedtls_cipher_base_t xts_aes_info = {
509 MBEDTLS_CIPHER_ID_AES,
510 NULL,
511#if defined(MBEDTLS_CIPHER_MODE_CBC)
512 NULL,
513#endif
514#if defined(MBEDTLS_CIPHER_MODE_CFB)
515 NULL,
516#endif
517#if defined(MBEDTLS_CIPHER_MODE_OFB)
518 NULL,
519#endif
520#if defined(MBEDTLS_CIPHER_MODE_CTR)
521 NULL,
522#endif
523#if defined(MBEDTLS_CIPHER_MODE_XTS)
524 aes_crypt_xts_wrap,
525#endif
526#if defined(MBEDTLS_CIPHER_MODE_STREAM)
527 NULL,
528#endif
529 xts_aes_setkey_enc_wrap,
530 xts_aes_setkey_dec_wrap,
531 xts_aes_ctx_alloc,
532 xts_aes_ctx_free
533};
534
535static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100536 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100537 16,
538 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100539 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100540 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100541 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100542 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100543 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100544};
545
546static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100547 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100548 16,
549 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100550 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100551 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100552 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100553 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100554 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100555};
556#endif /* MBEDTLS_CIPHER_MODE_XTS */
557
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200558#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100559static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
560 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200561{
Gilles Peskine449bd832023-01-11 14:50:10 +0100562 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
563 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200564}
565
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200566static const mbedtls_cipher_base_t gcm_aes_info = {
567 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200568 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200569#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200570 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100571#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200572#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200573 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100574#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100575#if defined(MBEDTLS_CIPHER_MODE_OFB)
576 NULL,
577#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200578#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200579 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100580#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100581#if defined(MBEDTLS_CIPHER_MODE_XTS)
582 NULL,
583#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200584#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200585 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100586#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200587 gcm_aes_setkey_wrap,
588 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200589 gcm_ctx_alloc,
590 gcm_ctx_free,
591};
592
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200593static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100594 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100595 16,
596 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100597 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100598 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100599 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200600 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100601 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100602};
603
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200604static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100605 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100606 16,
607 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100608 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100609 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100610 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200611 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100612 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200613};
614
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200615static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100616 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100617 16,
618 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100619 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100620 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100621 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200622 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100623 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100624};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200625#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100626
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200627#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100628static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
629 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200630{
Gilles Peskine449bd832023-01-11 14:50:10 +0100631 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
632 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200633}
634
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200635static const mbedtls_cipher_base_t ccm_aes_info = {
636 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200637 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200638#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200639 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100640#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200641#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200642 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100643#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100644#if defined(MBEDTLS_CIPHER_MODE_OFB)
645 NULL,
646#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200647#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200648 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100649#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100650#if defined(MBEDTLS_CIPHER_MODE_XTS)
651 NULL,
652#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200653#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200654 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100655#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200656 ccm_aes_setkey_wrap,
657 ccm_aes_setkey_wrap,
658 ccm_ctx_alloc,
659 ccm_ctx_free,
660};
661
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200662static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100663 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100664 16,
665 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100666 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100667 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100668 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200669 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100670 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200671};
672
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200673static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100674 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100675 16,
676 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100677 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100678 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100679 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200680 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100681 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200682};
683
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200684static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100685 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100686 16,
687 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100688 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100689 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100690 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200691 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100692 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200693};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200694
695static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100696 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100697 16,
698 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100699 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100700 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100701 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200702 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100703 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200704};
705
706static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100707 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100708 16,
709 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100710 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100711 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100712 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200713 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100714 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200715};
716
717static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100718 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100719 16,
720 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100721 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100722 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100723 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200724 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100725 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200726};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200727#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200728
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200729#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000730
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200731#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000732
Gilles Peskine449bd832023-01-11 14:50:10 +0100733static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
734 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200735{
Gilles Peskine449bd832023-01-11 14:50:10 +0100736 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
737 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200738}
739
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200740#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100741static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
742 size_t length, unsigned char *iv,
743 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000744{
Gilles Peskine449bd832023-01-11 14:50:10 +0100745 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
746 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000747}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200748#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000749
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200750#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100751static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
752 size_t length, size_t *iv_off, unsigned char *iv,
753 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000754{
Gilles Peskine449bd832023-01-11 14:50:10 +0100755 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
756 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000757}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200758#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000759
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200760#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100761static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
762 unsigned char *nonce_counter, unsigned char *stream_block,
763 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000764{
Gilles Peskine449bd832023-01-11 14:50:10 +0100765 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
766 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000767}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200768#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000769
Gilles Peskine449bd832023-01-11 14:50:10 +0100770static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
771 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000772{
Gilles Peskine449bd832023-01-11 14:50:10 +0100773 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000774}
775
Gilles Peskine449bd832023-01-11 14:50:10 +0100776static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
777 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000778{
Gilles Peskine449bd832023-01-11 14:50:10 +0100779 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000780}
781
Gilles Peskine449bd832023-01-11 14:50:10 +0100782static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000783{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200784 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100785 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200786
Gilles Peskine449bd832023-01-11 14:50:10 +0100787 if (ctx == NULL) {
788 return NULL;
789 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200790
Gilles Peskine449bd832023-01-11 14:50:10 +0100791 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200792
Gilles Peskine449bd832023-01-11 14:50:10 +0100793 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000794}
795
Gilles Peskine449bd832023-01-11 14:50:10 +0100796static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000797{
Gilles Peskine449bd832023-01-11 14:50:10 +0100798 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
799 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000800}
801
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200802static const mbedtls_cipher_base_t camellia_info = {
803 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200804 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200805#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000806 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100807#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200808#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000809 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100810#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100811#if defined(MBEDTLS_CIPHER_MODE_OFB)
812 NULL,
813#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200814#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000815 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100816#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100817#if defined(MBEDTLS_CIPHER_MODE_XTS)
818 NULL,
819#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200820#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200821 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100822#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000823 camellia_setkey_enc_wrap,
824 camellia_setkey_dec_wrap,
825 camellia_ctx_alloc,
826 camellia_ctx_free
827};
828
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200829static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100830 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100831 16,
832 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100833 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100834 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100835 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200836 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100837 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200838};
839
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200840static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100841 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100842 16,
843 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100844 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100845 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100846 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200847 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100848 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200849};
850
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200851static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100852 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100853 16,
854 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100855 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100856 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100857 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200858 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100859 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200860};
861
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200862#if defined(MBEDTLS_CIPHER_MODE_CBC)
863static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100864 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100865 16,
866 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100867 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100868 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100869 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200870 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100871 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000872};
873
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200874static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100875 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100876 16,
877 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100878 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100879 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100880 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200881 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100882 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000883};
884
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200885static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100886 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100887 16,
888 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100889 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100890 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100891 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200892 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100893 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000894};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200895#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000896
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200897#if defined(MBEDTLS_CIPHER_MODE_CFB)
898static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100899 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100900 16,
901 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100902 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100903 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100904 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200905 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100906 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000907};
908
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200909static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100910 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100911 16,
912 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100913 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100914 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100915 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200916 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100917 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000918};
919
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200920static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100921 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100922 16,
923 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100924 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100925 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100926 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200927 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100928 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000929};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200930#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000931
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200932#if defined(MBEDTLS_CIPHER_MODE_CTR)
933static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100934 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100935 16,
936 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100937 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100938 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100939 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200940 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100941 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000942};
943
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200944static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100945 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100946 16,
947 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100948 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100949 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100950 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200951 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100952 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000953};
954
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200955static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100956 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100957 16,
958 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100959 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100960 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100961 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200962 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100963 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000964};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200965#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000966
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200967#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100968static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
969 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200970{
Gilles Peskine449bd832023-01-11 14:50:10 +0100971 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
972 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200973}
974
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200975static const mbedtls_cipher_base_t gcm_camellia_info = {
976 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200977 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200978#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200979 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100980#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200981#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200982 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100983#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100984#if defined(MBEDTLS_CIPHER_MODE_OFB)
985 NULL,
986#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200987#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200988 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100989#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100990#if defined(MBEDTLS_CIPHER_MODE_XTS)
991 NULL,
992#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200993#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200994 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100995#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200996 gcm_camellia_setkey_wrap,
997 gcm_camellia_setkey_wrap,
998 gcm_ctx_alloc,
999 gcm_ctx_free,
1000};
1001
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001002static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001003 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001004 16,
1005 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001006 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001007 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001008 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001009 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001010 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001011};
1012
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001013static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001014 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001015 16,
1016 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001017 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001018 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001019 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001020 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001021 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001022};
1023
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001024static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001025 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001026 16,
1027 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001028 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001029 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001030 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001031 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001032 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001033};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001034#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001035
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001036#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001037static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1038 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001039{
Gilles Peskine449bd832023-01-11 14:50:10 +01001040 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1041 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001042}
1043
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001044static const mbedtls_cipher_base_t ccm_camellia_info = {
1045 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001046 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001047#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001048 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001049#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001050#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001051 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001052#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001053#if defined(MBEDTLS_CIPHER_MODE_OFB)
1054 NULL,
1055#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001056#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001057 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001058#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001059#if defined(MBEDTLS_CIPHER_MODE_XTS)
1060 NULL,
1061#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001062#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001063 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001064#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001065 ccm_camellia_setkey_wrap,
1066 ccm_camellia_setkey_wrap,
1067 ccm_ctx_alloc,
1068 ccm_ctx_free,
1069};
1070
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001071static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001072 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001073 16,
1074 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001075 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001076 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001077 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001078 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001079 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001080};
1081
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001082static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001083 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001084 16,
1085 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001086 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001087 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001088 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001089 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001090 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001091};
1092
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001093static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001094 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001095 16,
1096 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001097 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001098 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001099 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001100 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001101 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001102};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001103
1104static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001105 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001106 16,
1107 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001108 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001109 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001110 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001111 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001112 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001113};
1114
1115static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001116 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001117 16,
1118 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001119 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001120 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001121 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001122 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001123 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001124};
1125
1126static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001127 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001128 16,
1129 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001130 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001131 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001132 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001133 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001134 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001135};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001136#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001137
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001138#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001139
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001140#if defined(MBEDTLS_ARIA_C)
1141
Gilles Peskine449bd832023-01-11 14:50:10 +01001142static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1143 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001144{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001145 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001146 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1147 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001148}
1149
1150#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001151static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1152 size_t length, unsigned char *iv,
1153 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001154{
Gilles Peskine449bd832023-01-11 14:50:10 +01001155 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1156 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001157}
1158#endif /* MBEDTLS_CIPHER_MODE_CBC */
1159
1160#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001161static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1162 size_t length, size_t *iv_off, unsigned char *iv,
1163 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001164{
Gilles Peskine449bd832023-01-11 14:50:10 +01001165 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1166 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001167}
1168#endif /* MBEDTLS_CIPHER_MODE_CFB */
1169
1170#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001171static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1172 unsigned char *nonce_counter, unsigned char *stream_block,
1173 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001174{
Gilles Peskine449bd832023-01-11 14:50:10 +01001175 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1176 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001177}
1178#endif /* MBEDTLS_CIPHER_MODE_CTR */
1179
Gilles Peskine449bd832023-01-11 14:50:10 +01001180static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1181 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001182{
Gilles Peskine449bd832023-01-11 14:50:10 +01001183 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001184}
1185
Gilles Peskine449bd832023-01-11 14:50:10 +01001186static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1187 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001188{
Gilles Peskine449bd832023-01-11 14:50:10 +01001189 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001190}
1191
Gilles Peskine449bd832023-01-11 14:50:10 +01001192static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001193{
1194 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001195 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001196
Gilles Peskine449bd832023-01-11 14:50:10 +01001197 if (ctx == NULL) {
1198 return NULL;
1199 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001200
Gilles Peskine449bd832023-01-11 14:50:10 +01001201 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001202
Gilles Peskine449bd832023-01-11 14:50:10 +01001203 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001204}
1205
Gilles Peskine449bd832023-01-11 14:50:10 +01001206static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001207{
Gilles Peskine449bd832023-01-11 14:50:10 +01001208 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1209 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001210}
1211
1212static const mbedtls_cipher_base_t aria_info = {
1213 MBEDTLS_CIPHER_ID_ARIA,
1214 aria_crypt_ecb_wrap,
1215#if defined(MBEDTLS_CIPHER_MODE_CBC)
1216 aria_crypt_cbc_wrap,
1217#endif
1218#if defined(MBEDTLS_CIPHER_MODE_CFB)
1219 aria_crypt_cfb128_wrap,
1220#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001221#if defined(MBEDTLS_CIPHER_MODE_OFB)
1222 NULL,
1223#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001224#if defined(MBEDTLS_CIPHER_MODE_CTR)
1225 aria_crypt_ctr_wrap,
1226#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001227#if defined(MBEDTLS_CIPHER_MODE_XTS)
1228 NULL,
1229#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001230#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1231 NULL,
1232#endif
1233 aria_setkey_enc_wrap,
1234 aria_setkey_dec_wrap,
1235 aria_ctx_alloc,
1236 aria_ctx_free
1237};
1238
1239static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001240 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001241 16,
1242 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001243 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001244 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001245 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001246 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001247 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001248};
1249
1250static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001251 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001252 16,
1253 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001254 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001255 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001256 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001257 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001258 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001259};
1260
1261static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001262 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001263 16,
1264 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001265 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001266 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001267 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001268 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001269 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001270};
1271
1272#if defined(MBEDTLS_CIPHER_MODE_CBC)
1273static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001274 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001275 16,
1276 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001277 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001278 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001279 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001280 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001281 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001282};
1283
1284static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001285 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001286 16,
1287 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001288 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001289 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001290 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001291 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001292 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001293};
1294
1295static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001296 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001297 16,
1298 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001299 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001300 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001301 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001302 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001303 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001304};
1305#endif /* MBEDTLS_CIPHER_MODE_CBC */
1306
1307#if defined(MBEDTLS_CIPHER_MODE_CFB)
1308static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001309 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001310 16,
1311 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001312 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001313 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001314 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001315 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001316 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001317};
1318
1319static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001320 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001321 16,
1322 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001323 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001324 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001325 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001326 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001327 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001328};
1329
1330static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001331 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001332 16,
1333 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001334 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001335 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001336 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001337 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001338 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001339};
1340#endif /* MBEDTLS_CIPHER_MODE_CFB */
1341
1342#if defined(MBEDTLS_CIPHER_MODE_CTR)
1343static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001344 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001345 16,
1346 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001347 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001348 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001349 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001350 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001351 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001352};
1353
1354static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001355 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001356 16,
1357 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001358 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001359 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001360 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001361 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001362 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001363};
1364
1365static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001366 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001367 16,
1368 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001369 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001370 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001371 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001372 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001373 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001374};
1375#endif /* MBEDTLS_CIPHER_MODE_CTR */
1376
1377#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001378static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1379 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001380{
Gilles Peskine449bd832023-01-11 14:50:10 +01001381 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1382 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001383}
1384
1385static const mbedtls_cipher_base_t gcm_aria_info = {
1386 MBEDTLS_CIPHER_ID_ARIA,
1387 NULL,
1388#if defined(MBEDTLS_CIPHER_MODE_CBC)
1389 NULL,
1390#endif
1391#if defined(MBEDTLS_CIPHER_MODE_CFB)
1392 NULL,
1393#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001394#if defined(MBEDTLS_CIPHER_MODE_OFB)
1395 NULL,
1396#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001397#if defined(MBEDTLS_CIPHER_MODE_CTR)
1398 NULL,
1399#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001400#if defined(MBEDTLS_CIPHER_MODE_XTS)
1401 NULL,
1402#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001403#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1404 NULL,
1405#endif
1406 gcm_aria_setkey_wrap,
1407 gcm_aria_setkey_wrap,
1408 gcm_ctx_alloc,
1409 gcm_ctx_free,
1410};
1411
1412static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001413 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001414 16,
1415 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001416 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001417 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001418 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001419 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001420 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001421};
1422
1423static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001424 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001425 16,
1426 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001427 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001428 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001429 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001430 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001431 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001432};
1433
1434static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001435 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001436 16,
1437 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001438 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001439 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001440 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001441 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001442 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001443};
1444#endif /* MBEDTLS_GCM_C */
1445
1446#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001447static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1448 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001449{
Gilles Peskine449bd832023-01-11 14:50:10 +01001450 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1451 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001452}
1453
1454static const mbedtls_cipher_base_t ccm_aria_info = {
1455 MBEDTLS_CIPHER_ID_ARIA,
1456 NULL,
1457#if defined(MBEDTLS_CIPHER_MODE_CBC)
1458 NULL,
1459#endif
1460#if defined(MBEDTLS_CIPHER_MODE_CFB)
1461 NULL,
1462#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001463#if defined(MBEDTLS_CIPHER_MODE_OFB)
1464 NULL,
1465#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001466#if defined(MBEDTLS_CIPHER_MODE_CTR)
1467 NULL,
1468#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001469#if defined(MBEDTLS_CIPHER_MODE_XTS)
1470 NULL,
1471#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001472#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1473 NULL,
1474#endif
1475 ccm_aria_setkey_wrap,
1476 ccm_aria_setkey_wrap,
1477 ccm_ctx_alloc,
1478 ccm_ctx_free,
1479};
1480
1481static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001482 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001483 16,
1484 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001485 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001486 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001487 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001488 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001489 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001490};
1491
1492static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001493 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001494 16,
1495 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001496 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001497 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001498 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001499 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001500 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001501};
1502
1503static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001504 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001505 16,
1506 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001507 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001508 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001509 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001510 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001511 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001512};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001513
1514static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001515 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001516 16,
1517 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001518 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001519 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001520 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001521 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001522 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001523};
1524
1525static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001526 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001527 16,
1528 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001529 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001530 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001531 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001532 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001533 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001534};
1535
1536static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001537 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001538 16,
1539 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001540 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001541 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001542 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001543 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001544 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001545};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001546#endif /* MBEDTLS_CCM_C */
1547
1548#endif /* MBEDTLS_ARIA_C */
1549
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001550#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001551
Gilles Peskine449bd832023-01-11 14:50:10 +01001552static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1553 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001554{
1555 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001556 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001557}
1558
Gilles Peskine449bd832023-01-11 14:50:10 +01001559static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1560 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001561{
1562 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001563 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001564}
1565
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001566#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001567static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1568 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001569{
Gilles Peskine449bd832023-01-11 14:50:10 +01001570 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1571 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001572}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001573#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001574
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001575#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001576static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1577 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001578{
Gilles Peskine449bd832023-01-11 14:50:10 +01001579 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1580 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001581}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001582#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001583
Gilles Peskine449bd832023-01-11 14:50:10 +01001584static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1585 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001586{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001587 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001588
Gilles Peskine449bd832023-01-11 14:50:10 +01001589 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001590}
1591
Gilles Peskine449bd832023-01-11 14:50:10 +01001592static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1593 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001594{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001595 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001596
Gilles Peskine449bd832023-01-11 14:50:10 +01001597 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001598}
1599
Gilles Peskine449bd832023-01-11 14:50:10 +01001600static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1601 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001602{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001603 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001604
Gilles Peskine449bd832023-01-11 14:50:10 +01001605 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001606}
1607
Gilles Peskine449bd832023-01-11 14:50:10 +01001608static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1609 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001610{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001611 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001612
Gilles Peskine449bd832023-01-11 14:50:10 +01001613 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001614}
1615
Gilles Peskine449bd832023-01-11 14:50:10 +01001616static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1617 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001618{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001619 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001620
Gilles Peskine449bd832023-01-11 14:50:10 +01001621 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001622}
1623
Gilles Peskine449bd832023-01-11 14:50:10 +01001624static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1625 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001626{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001627 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001628
Gilles Peskine449bd832023-01-11 14:50:10 +01001629 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001630}
1631
Gilles Peskine449bd832023-01-11 14:50:10 +01001632static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001633{
Gilles Peskine449bd832023-01-11 14:50:10 +01001634 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001635
Gilles Peskine449bd832023-01-11 14:50:10 +01001636 if (des == NULL) {
1637 return NULL;
1638 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001639
Gilles Peskine449bd832023-01-11 14:50:10 +01001640 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001641
Gilles Peskine449bd832023-01-11 14:50:10 +01001642 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001643}
1644
Gilles Peskine449bd832023-01-11 14:50:10 +01001645static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001646{
Gilles Peskine449bd832023-01-11 14:50:10 +01001647 mbedtls_des_free((mbedtls_des_context *) ctx);
1648 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001649}
1650
Gilles Peskine449bd832023-01-11 14:50:10 +01001651static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001652{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001653 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001654 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001655
Gilles Peskine449bd832023-01-11 14:50:10 +01001656 if (des3 == NULL) {
1657 return NULL;
1658 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001659
Gilles Peskine449bd832023-01-11 14:50:10 +01001660 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001661
Gilles Peskine449bd832023-01-11 14:50:10 +01001662 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001663}
1664
Gilles Peskine449bd832023-01-11 14:50:10 +01001665static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001666{
Gilles Peskine449bd832023-01-11 14:50:10 +01001667 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1668 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001669}
1670
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001671static const mbedtls_cipher_base_t des_info = {
1672 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001673 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001674#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001675 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001676#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001677#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001678 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001679#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001680#if defined(MBEDTLS_CIPHER_MODE_OFB)
1681 NULL,
1682#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001683#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001684 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001685#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001686#if defined(MBEDTLS_CIPHER_MODE_XTS)
1687 NULL,
1688#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001689#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001690 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001691#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001692 des_setkey_enc_wrap,
1693 des_setkey_dec_wrap,
1694 des_ctx_alloc,
1695 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001696};
1697
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001698static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001699 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001700 8,
1701 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001702 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001703 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001704 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001705 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001706 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001707};
1708
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001709#if defined(MBEDTLS_CIPHER_MODE_CBC)
1710static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001711 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001712 8,
1713 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001714 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001715 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001716 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001717 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001718 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001719};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001720#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001721
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001722static const mbedtls_cipher_base_t des_ede_info = {
1723 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001724 des3_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 des3_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 des3_set2key_enc_wrap,
1744 des3_set2key_dec_wrap,
1745 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001746 des3_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_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001750 "DES-EDE-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_EDE >> 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_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001756 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001757 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
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_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001762 "DES-EDE-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_EDE >> 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_EDE_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_EDE
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_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001774 MBEDTLS_CIPHER_ID_3DES,
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 Bakker343a8702011-06-09 14:27:58 +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 Bakker343a8702011-06-09 14:27:58 +00001794 des3_set3key_enc_wrap,
1795 des3_set3key_dec_wrap,
1796 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001797 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001798};
1799
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001800static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001801 "DES-EDE3-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_EDE3 >> 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_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001807 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001808 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001809};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001810#if defined(MBEDTLS_CIPHER_MODE_CBC)
1811static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001812 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001813 8,
1814 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001815 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001816 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001817 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001818 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001819 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001820};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001821#endif /* MBEDTLS_CIPHER_MODE_CBC */
1822#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001823
Daniel Kingbd920622016-05-15 19:56:20 -03001824#if defined(MBEDTLS_CHACHA20_C)
1825
Gilles Peskine449bd832023-01-11 14:50:10 +01001826static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1827 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001828{
Gilles Peskine449bd832023-01-11 14:50:10 +01001829 if (key_bitlen != 256U) {
1830 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1831 }
Daniel Kingbd920622016-05-15 19:56:20 -03001832
Gilles Peskine449bd832023-01-11 14:50:10 +01001833 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1834 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1835 }
Daniel Kingbd920622016-05-15 19:56:20 -03001836
Gilles Peskine449bd832023-01-11 14:50:10 +01001837 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001838}
1839
Gilles Peskine449bd832023-01-11 14:50:10 +01001840static int chacha20_stream_wrap(void *ctx, size_t length,
1841 const unsigned char *input,
1842 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001843{
Janos Follath24eed8d2019-11-22 13:21:35 +00001844 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001845
Gilles Peskine449bd832023-01-11 14:50:10 +01001846 ret = mbedtls_chacha20_update(ctx, length, input, output);
1847 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1848 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1849 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001850
Gilles Peskine449bd832023-01-11 14:50:10 +01001851 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001852}
1853
Gilles Peskine449bd832023-01-11 14:50:10 +01001854static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001855{
1856 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001857 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001858
Gilles Peskine449bd832023-01-11 14:50:10 +01001859 if (ctx == NULL) {
1860 return NULL;
1861 }
Daniel Kingbd920622016-05-15 19:56:20 -03001862
Gilles Peskine449bd832023-01-11 14:50:10 +01001863 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001864
Gilles Peskine449bd832023-01-11 14:50:10 +01001865 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001866}
1867
Gilles Peskine449bd832023-01-11 14:50:10 +01001868static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001869{
Gilles Peskine449bd832023-01-11 14:50:10 +01001870 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1871 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001872}
1873
1874static const mbedtls_cipher_base_t chacha20_base_info = {
1875 MBEDTLS_CIPHER_ID_CHACHA20,
1876 NULL,
1877#if defined(MBEDTLS_CIPHER_MODE_CBC)
1878 NULL,
1879#endif
1880#if defined(MBEDTLS_CIPHER_MODE_CFB)
1881 NULL,
1882#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001883#if defined(MBEDTLS_CIPHER_MODE_OFB)
1884 NULL,
1885#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001886#if defined(MBEDTLS_CIPHER_MODE_CTR)
1887 NULL,
1888#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001889#if defined(MBEDTLS_CIPHER_MODE_XTS)
1890 NULL,
1891#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001892#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001893 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001894#endif
1895 chacha20_setkey_wrap,
1896 chacha20_setkey_wrap,
1897 chacha20_ctx_alloc,
1898 chacha20_ctx_free
1899};
1900static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001901 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001902 1,
1903 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001904 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001905 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001906 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001907 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001908 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001909};
1910#endif /* MBEDTLS_CHACHA20_C */
1911
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001912#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001913
Gilles Peskine449bd832023-01-11 14:50:10 +01001914static int chachapoly_setkey_wrap(void *ctx,
1915 const unsigned char *key,
1916 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001917{
Gilles Peskine449bd832023-01-11 14:50:10 +01001918 if (key_bitlen != 256U) {
1919 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1920 }
Daniel King8fe47012016-05-17 20:33:28 -03001921
Gilles Peskine449bd832023-01-11 14:50:10 +01001922 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1923 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1924 }
Daniel King8fe47012016-05-17 20:33:28 -03001925
Gilles Peskine449bd832023-01-11 14:50:10 +01001926 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001927}
1928
Gilles Peskine449bd832023-01-11 14:50:10 +01001929static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001930{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001931 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001932 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001933
Gilles Peskine449bd832023-01-11 14:50:10 +01001934 if (ctx == NULL) {
1935 return NULL;
1936 }
Daniel King8fe47012016-05-17 20:33:28 -03001937
Gilles Peskine449bd832023-01-11 14:50:10 +01001938 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001939
Gilles Peskine449bd832023-01-11 14:50:10 +01001940 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001941}
1942
Gilles Peskine449bd832023-01-11 14:50:10 +01001943static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001944{
Gilles Peskine449bd832023-01-11 14:50:10 +01001945 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1946 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001947}
1948
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001949static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001950 MBEDTLS_CIPHER_ID_CHACHA20,
1951 NULL,
1952#if defined(MBEDTLS_CIPHER_MODE_CBC)
1953 NULL,
1954#endif
1955#if defined(MBEDTLS_CIPHER_MODE_CFB)
1956 NULL,
1957#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001958#if defined(MBEDTLS_CIPHER_MODE_OFB)
1959 NULL,
1960#endif
Daniel King8fe47012016-05-17 20:33:28 -03001961#if defined(MBEDTLS_CIPHER_MODE_CTR)
1962 NULL,
1963#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001964#if defined(MBEDTLS_CIPHER_MODE_XTS)
1965 NULL,
1966#endif
Daniel King8fe47012016-05-17 20:33:28 -03001967#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1968 NULL,
1969#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001970 chachapoly_setkey_wrap,
1971 chachapoly_setkey_wrap,
1972 chachapoly_ctx_alloc,
1973 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001974};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001975static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001976 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001977 1,
1978 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001979 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001980 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001981 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03001982 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001983 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03001984};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001985#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03001986
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001987#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01001988static int null_crypt_stream(void *ctx, size_t length,
1989 const unsigned char *input,
1990 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001991{
1992 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01001993 memmove(output, input, length);
1994 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001995}
1996
Gilles Peskine449bd832023-01-11 14:50:10 +01001997static int null_setkey(void *ctx, const unsigned char *key,
1998 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001999{
2000 ((void) ctx);
2001 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002002 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002003
Gilles Peskine449bd832023-01-11 14:50:10 +01002004 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002005}
2006
Gilles Peskine449bd832023-01-11 14:50:10 +01002007static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002008{
Gilles Peskine449bd832023-01-11 14:50:10 +01002009 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002010}
2011
Gilles Peskine449bd832023-01-11 14:50:10 +01002012static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002013{
2014 ((void) ctx);
2015}
2016
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002017static const mbedtls_cipher_base_t null_base_info = {
2018 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002019 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002020#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002021 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002022#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002023#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002024 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002025#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002026#if defined(MBEDTLS_CIPHER_MODE_OFB)
2027 NULL,
2028#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002029#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002030 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002031#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002032#if defined(MBEDTLS_CIPHER_MODE_XTS)
2033 NULL,
2034#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002035#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002036 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002037#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002038 null_setkey,
2039 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002040 null_ctx_alloc,
2041 null_ctx_free
2042};
2043
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002044static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002045 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002046 1,
2047 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002048 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002049 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002050 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002051 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002052 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002053};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002054#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002055
Jack Lloydffdf2882019-03-07 17:00:32 -05002056#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002057static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002058{
Gilles Peskine449bd832023-01-11 14:50:10 +01002059 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002060
Gilles Peskine449bd832023-01-11 14:50:10 +01002061 if (ctx != NULL) {
2062 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2063 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002064
Gilles Peskine449bd832023-01-11 14:50:10 +01002065 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002066}
2067
Gilles Peskine449bd832023-01-11 14:50:10 +01002068static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002069{
Gilles Peskine449bd832023-01-11 14:50:10 +01002070 mbedtls_nist_kw_free(ctx);
2071 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002072}
2073
Gilles Peskine449bd832023-01-11 14:50:10 +01002074static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2075 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002076{
Gilles Peskine449bd832023-01-11 14:50:10 +01002077 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2078 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002079}
2080
Gilles Peskine449bd832023-01-11 14:50:10 +01002081static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2082 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002083{
Gilles Peskine449bd832023-01-11 14:50:10 +01002084 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2085 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002086}
2087
2088static const mbedtls_cipher_base_t kw_aes_info = {
2089 MBEDTLS_CIPHER_ID_AES,
2090 NULL,
2091#if defined(MBEDTLS_CIPHER_MODE_CBC)
2092 NULL,
2093#endif
2094#if defined(MBEDTLS_CIPHER_MODE_CFB)
2095 NULL,
2096#endif
2097#if defined(MBEDTLS_CIPHER_MODE_OFB)
2098 NULL,
2099#endif
2100#if defined(MBEDTLS_CIPHER_MODE_CTR)
2101 NULL,
2102#endif
2103#if defined(MBEDTLS_CIPHER_MODE_XTS)
2104 NULL,
2105#endif
2106#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2107 NULL,
2108#endif
2109 kw_aes_setkey_wrap,
2110 kw_aes_setkey_unwrap,
2111 kw_ctx_alloc,
2112 kw_ctx_free,
2113};
2114
2115static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002116 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002117 16,
2118 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002119 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002120 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002121 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002122 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002123 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002124};
2125
2126static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002127 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002128 16,
2129 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002130 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002131 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002132 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002133 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002134 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002135};
2136
2137static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002138 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002139 16,
2140 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002141 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002142 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002143 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002144 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002145 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002146};
2147
2148static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002149 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002150 16,
2151 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002152 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002153 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002154 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002155 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002156 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002157};
2158
2159static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002160 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002161 16,
2162 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002163 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002164 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002165 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002166 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002167 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002168};
2169
2170static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002171 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002172 16,
2173 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002174 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002175 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002176 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002177 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002178 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002179};
2180#endif /* MBEDTLS_NIST_KW_C */
2181
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002182const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002183{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002184#if defined(MBEDTLS_AES_C)
2185 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2186 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2187 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2188#if defined(MBEDTLS_CIPHER_MODE_CBC)
2189 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2190 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2191 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002192#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002193#if defined(MBEDTLS_CIPHER_MODE_CFB)
2194 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2195 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2196 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002197#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002198#if defined(MBEDTLS_CIPHER_MODE_OFB)
2199 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2200 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2201 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2202#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002203#if defined(MBEDTLS_CIPHER_MODE_CTR)
2204 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2205 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2206 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002207#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002208#if defined(MBEDTLS_CIPHER_MODE_XTS)
2209 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2210 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2211#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002212#if defined(MBEDTLS_GCM_C)
2213 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2214 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2215 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002216#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002217#if defined(MBEDTLS_CCM_C)
2218 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2219 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2220 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002221 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
2222 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2223 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002224#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002225#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002226
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002227#if defined(MBEDTLS_CAMELLIA_C)
2228 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2229 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2230 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2231#if defined(MBEDTLS_CIPHER_MODE_CBC)
2232 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2233 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2234 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002235#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002236#if defined(MBEDTLS_CIPHER_MODE_CFB)
2237 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2238 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2239 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002240#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002241#if defined(MBEDTLS_CIPHER_MODE_CTR)
2242 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2243 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2244 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002245#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002246#if defined(MBEDTLS_GCM_C)
2247 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2248 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2249 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002250#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002251#if defined(MBEDTLS_CCM_C)
2252 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2253 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2254 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002255 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2256 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2257 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002258#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002259#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002260
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002261#if defined(MBEDTLS_ARIA_C)
2262 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2263 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2264 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2265#if defined(MBEDTLS_CIPHER_MODE_CBC)
2266 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2267 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2268 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2269#endif
2270#if defined(MBEDTLS_CIPHER_MODE_CFB)
2271 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2272 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2273 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2274#endif
2275#if defined(MBEDTLS_CIPHER_MODE_CTR)
2276 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2277 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2278 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2279#endif
2280#if defined(MBEDTLS_GCM_C)
2281 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2282 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2283 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2284#endif
2285#if defined(MBEDTLS_CCM_C)
2286 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2287 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2288 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002289 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2290 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2291 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002292#endif
2293#endif /* MBEDTLS_ARIA_C */
2294
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002295#if defined(MBEDTLS_DES_C)
2296 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2297 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2298 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2299#if defined(MBEDTLS_CIPHER_MODE_CBC)
2300 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2301 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2302 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002303#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002304#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002305
Daniel Kingbd920622016-05-15 19:56:20 -03002306#if defined(MBEDTLS_CHACHA20_C)
2307 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2308#endif
2309
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002310#if defined(MBEDTLS_CHACHAPOLY_C)
2311 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002312#endif
2313
Jack Lloydffdf2882019-03-07 17:00:32 -05002314#if defined(MBEDTLS_NIST_KW_C)
2315 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2316 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2317 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2318 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2319 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2320 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2321#endif
2322
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002323#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2324 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2325#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002326
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002327 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002328};
2329
Gilles Peskine449bd832023-01-11 14:50:10 +01002330#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2331 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002332int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002333
Dave Rodgman3b46b772023-06-24 13:25:06 +01002334const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002335#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002336 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002337#endif
2338#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002339 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002340#endif
2341#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002342 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002343#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002344#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002345 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002346#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002347#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002348 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002349#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002350#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002351 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002352#endif
2353#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002354 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002355#endif
2356#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002357 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002358#endif
2359#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002360 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002361#endif
2362#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002363 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002364#endif
2365#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002366 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002367#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002368#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002369 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002370#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002371#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002372 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002373#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002374#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002375 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002376#endif
2377#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002378 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002379#endif
2380#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002381 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002382#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002383#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002384 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002385#endif
2386};
2387
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002388#endif /* MBEDTLS_CIPHER_C */