blob: 20bb9847dc7e6dfd54e3acd9989e844a4c98533e [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)
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100123 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100124#endif
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100125 /* Prevent compile failure due to empty enum */
Dave Rodgmane3330f82023-08-14 15:26:28 +0100126 MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100127};
Dave Rodgmande3de772023-06-24 12:51:06 +0100128
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200129#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200130/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100131static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200132{
Gilles Peskine449bd832023-01-11 14:50:10 +0100133 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200134
Gilles Peskine449bd832023-01-11 14:50:10 +0100135 if (ctx != NULL) {
136 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
137 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200138
Gilles Peskine449bd832023-01-11 14:50:10 +0100139 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200140}
141
Gilles Peskine449bd832023-01-11 14:50:10 +0100142static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200143{
Gilles Peskine449bd832023-01-11 14:50:10 +0100144 mbedtls_gcm_free(ctx);
145 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200146}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200147#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200148
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200149#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200150/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100151static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200152{
Gilles Peskine449bd832023-01-11 14:50:10 +0100153 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200154
Gilles Peskine449bd832023-01-11 14:50:10 +0100155 if (ctx != NULL) {
156 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
157 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200158
Gilles Peskine449bd832023-01-11 14:50:10 +0100159 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200160}
161
Gilles Peskine449bd832023-01-11 14:50:10 +0100162static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200163{
Gilles Peskine449bd832023-01-11 14:50:10 +0100164 mbedtls_ccm_free(ctx);
165 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200166}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200167#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200168
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200169#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000170
Gilles Peskine449bd832023-01-11 14:50:10 +0100171static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
172 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200173{
Gilles Peskine449bd832023-01-11 14:50:10 +0100174 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200175}
176
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200177#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100178static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
179 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000180{
Gilles Peskine449bd832023-01-11 14:50:10 +0100181 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
182 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000183}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200184#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000185
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200186#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100187static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
188 size_t length, size_t *iv_off, unsigned char *iv,
189 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000190{
Gilles Peskine449bd832023-01-11 14:50:10 +0100191 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
192 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000193}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200194#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000195
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100196#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100197static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
198 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100199{
Gilles Peskine449bd832023-01-11 14:50:10 +0100200 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
201 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100202}
203#endif /* MBEDTLS_CIPHER_MODE_OFB */
204
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200205#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100206static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
207 unsigned char *nonce_counter, unsigned char *stream_block,
208 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000209{
Gilles Peskine449bd832023-01-11 14:50:10 +0100210 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
211 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000212}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200213#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000214
Jaeden Ameroc6539902018-04-30 17:17:41 +0100215#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100216static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
217 size_t length,
218 const unsigned char data_unit[16],
219 const unsigned char *input,
220 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100221{
222 mbedtls_aes_xts_context *xts_ctx = ctx;
223 int mode;
224
Gilles Peskine449bd832023-01-11 14:50:10 +0100225 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100226 case MBEDTLS_ENCRYPT:
227 mode = MBEDTLS_AES_ENCRYPT;
228 break;
229 case MBEDTLS_DECRYPT:
230 mode = MBEDTLS_AES_DECRYPT;
231 break;
232 default:
233 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
234 }
235
Gilles Peskine449bd832023-01-11 14:50:10 +0100236 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
237 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100238}
239#endif /* MBEDTLS_CIPHER_MODE_XTS */
240
Yanray Wangdb9b3092023-08-24 15:47:53 +0800241#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Gilles Peskine449bd832023-01-11 14:50:10 +0100242static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
243 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000244{
Gilles Peskine449bd832023-01-11 14:50:10 +0100245 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000246}
Yanray Wangdb9b3092023-08-24 15:47:53 +0800247#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +0000248
Gilles Peskine449bd832023-01-11 14:50:10 +0100249static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
250 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000251{
Gilles Peskine449bd832023-01-11 14:50:10 +0100252 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000253}
254
Gilles Peskine449bd832023-01-11 14:50:10 +0100255static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000256{
Gilles Peskine449bd832023-01-11 14:50:10 +0100257 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200258
Gilles Peskine449bd832023-01-11 14:50:10 +0100259 if (aes == NULL) {
260 return NULL;
261 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200262
Gilles Peskine449bd832023-01-11 14:50:10 +0100263 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200264
Gilles Peskine449bd832023-01-11 14:50:10 +0100265 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000266}
267
Gilles Peskine449bd832023-01-11 14:50:10 +0100268static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000269{
Gilles Peskine449bd832023-01-11 14:50:10 +0100270 mbedtls_aes_free((mbedtls_aes_context *) ctx);
271 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000272}
273
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200274static const mbedtls_cipher_base_t aes_info = {
275 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200276 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200277#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000278 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100279#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200280#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000281 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100282#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100283#if defined(MBEDTLS_CIPHER_MODE_OFB)
284 aes_crypt_ofb_wrap,
285#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200286#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000287 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100288#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100289#if defined(MBEDTLS_CIPHER_MODE_XTS)
290 NULL,
291#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200292#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200293 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100294#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000295 aes_setkey_enc_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800296#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Paul Bakker343a8702011-06-09 14:27:58 +0000297 aes_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800298#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000299 aes_ctx_alloc,
300 aes_ctx_free
301};
302
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200303static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100304 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100305 16,
306 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100307 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100308 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100309 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200310 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100311 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200312};
313
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200314static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100315 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100316 16,
317 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100318 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100319 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100320 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200321 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100322 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200323};
324
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200325static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100326 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100327 16,
328 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100329 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100330 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100331 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200332 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100333 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200334};
335
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200336#if defined(MBEDTLS_CIPHER_MODE_CBC)
337static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100338 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100339 16,
340 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100341 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100342 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100343 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200344 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100345 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000346};
347
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200348static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100349 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100350 16,
351 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100352 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100353 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100354 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200355 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100356 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000357};
358
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200359static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100360 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100361 16,
362 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100363 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100364 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100365 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200366 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100367 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000368};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200369#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000370
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200371#if defined(MBEDTLS_CIPHER_MODE_CFB)
372static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100373 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100374 16,
375 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100376 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100377 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100378 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200379 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100380 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000381};
382
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200383static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100384 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100385 16,
386 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100387 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100388 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100389 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200390 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100391 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000392};
393
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200394static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100395 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100396 16,
397 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100398 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100399 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100400 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200401 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100402 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000403};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200404#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000405
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100406#if defined(MBEDTLS_CIPHER_MODE_OFB)
407static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100408 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100409 16,
410 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100411 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100412 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100413 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100414 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100415 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100416};
417
418static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100419 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100420 16,
421 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100422 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100423 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100424 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100425 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100426 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100427};
428
429static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100430 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100431 16,
432 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100433 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100434 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100435 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100436 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100437 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100438};
439#endif /* MBEDTLS_CIPHER_MODE_OFB */
440
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200441#if defined(MBEDTLS_CIPHER_MODE_CTR)
442static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100443 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100444 16,
445 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100446 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100447 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100448 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200449 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100450 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000451};
452
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200453static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100454 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100455 16,
456 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100457 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100458 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100459 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200460 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100461 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000462};
463
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200464static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100465 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100466 16,
467 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100468 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100469 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100470 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200471 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100472 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000473};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200474#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000475
Jaeden Ameroc6539902018-04-30 17:17:41 +0100476#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100477static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
478 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100479{
480 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100481 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100482}
483
Gilles Peskine449bd832023-01-11 14:50:10 +0100484static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
485 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100486{
487 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100488 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100489}
490
Gilles Peskine449bd832023-01-11 14:50:10 +0100491static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100492{
Gilles Peskine449bd832023-01-11 14:50:10 +0100493 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100494
Gilles Peskine449bd832023-01-11 14:50:10 +0100495 if (xts_ctx != NULL) {
496 mbedtls_aes_xts_init(xts_ctx);
497 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100498
Gilles Peskine449bd832023-01-11 14:50:10 +0100499 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100500}
501
Gilles Peskine449bd832023-01-11 14:50:10 +0100502static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100503{
504 mbedtls_aes_xts_context *xts_ctx = ctx;
505
Gilles Peskine449bd832023-01-11 14:50:10 +0100506 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100507 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100508 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100509
Gilles Peskine449bd832023-01-11 14:50:10 +0100510 mbedtls_aes_xts_free(xts_ctx);
511 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100512}
513
514static const mbedtls_cipher_base_t xts_aes_info = {
515 MBEDTLS_CIPHER_ID_AES,
516 NULL,
517#if defined(MBEDTLS_CIPHER_MODE_CBC)
518 NULL,
519#endif
520#if defined(MBEDTLS_CIPHER_MODE_CFB)
521 NULL,
522#endif
523#if defined(MBEDTLS_CIPHER_MODE_OFB)
524 NULL,
525#endif
526#if defined(MBEDTLS_CIPHER_MODE_CTR)
527 NULL,
528#endif
529#if defined(MBEDTLS_CIPHER_MODE_XTS)
530 aes_crypt_xts_wrap,
531#endif
532#if defined(MBEDTLS_CIPHER_MODE_STREAM)
533 NULL,
534#endif
535 xts_aes_setkey_enc_wrap,
536 xts_aes_setkey_dec_wrap,
537 xts_aes_ctx_alloc,
538 xts_aes_ctx_free
539};
540
541static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100542 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100543 16,
544 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100545 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100546 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100547 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100548 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100549 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100550};
551
552static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100553 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100554 16,
555 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100556 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100557 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100558 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100559 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100560 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100561};
562#endif /* MBEDTLS_CIPHER_MODE_XTS */
563
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200564#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100565static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
566 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200567{
Gilles Peskine449bd832023-01-11 14:50:10 +0100568 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
569 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200570}
571
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200572static const mbedtls_cipher_base_t gcm_aes_info = {
573 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200574 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200575#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200576 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100577#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200578#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200579 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100580#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100581#if defined(MBEDTLS_CIPHER_MODE_OFB)
582 NULL,
583#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200584#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200585 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100586#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100587#if defined(MBEDTLS_CIPHER_MODE_XTS)
588 NULL,
589#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200590#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200591 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100592#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200593 gcm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800594#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200595 gcm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800596#endif
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200597 gcm_ctx_alloc,
598 gcm_ctx_free,
599};
600
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200601static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100602 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100603 16,
604 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100605 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100606 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100607 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200608 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100609 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100610};
611
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200612static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100613 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100614 16,
615 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100616 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100617 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100618 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200619 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100620 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200621};
622
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200623static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100624 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100625 16,
626 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100627 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100628 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100629 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200630 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100631 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100632};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200633#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100634
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200635#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100636static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
637 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200638{
Gilles Peskine449bd832023-01-11 14:50:10 +0100639 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
640 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200641}
642
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200643static const mbedtls_cipher_base_t ccm_aes_info = {
644 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200645 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200646#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200647 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100648#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200649#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200650 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100651#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100652#if defined(MBEDTLS_CIPHER_MODE_OFB)
653 NULL,
654#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200655#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200656 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100657#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100658#if defined(MBEDTLS_CIPHER_MODE_XTS)
659 NULL,
660#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200661#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200662 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100663#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200664 ccm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800665#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200666 ccm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800667#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200668 ccm_ctx_alloc,
669 ccm_ctx_free,
670};
671
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200672static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100673 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100674 16,
675 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100676 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100677 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100678 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200679 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100680 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200681};
682
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200683static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100684 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100685 16,
686 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100687 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100688 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100689 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200690 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100691 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200692};
693
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200694static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100695 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100696 16,
697 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100698 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100699 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100700 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200701 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100702 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200703};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200704
705static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100706 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100707 16,
708 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100709 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100710 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100711 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200712 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100713 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200714};
715
716static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100717 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100718 16,
719 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100720 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100721 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100722 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200723 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100724 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200725};
726
727static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100728 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100729 16,
730 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100731 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100732 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100733 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200734 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100735 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200736};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200737#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200738
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200739#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000740
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200741#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000742
Gilles Peskine449bd832023-01-11 14:50:10 +0100743static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
744 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200745{
Gilles Peskine449bd832023-01-11 14:50:10 +0100746 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
747 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200748}
749
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200750#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100751static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
752 size_t length, unsigned char *iv,
753 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000754{
Gilles Peskine449bd832023-01-11 14:50:10 +0100755 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
756 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000757}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200758#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000759
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200760#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100761static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
762 size_t length, size_t *iv_off, unsigned char *iv,
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_cfb128((mbedtls_camellia_context *) ctx, operation, length,
766 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000767}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200768#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000769
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200770#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100771static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
772 unsigned char *nonce_counter, unsigned char *stream_block,
773 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000774{
Gilles Peskine449bd832023-01-11 14:50:10 +0100775 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
776 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000777}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200778#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000779
Yanray Wangdb9b3092023-08-24 15:47:53 +0800780#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Gilles Peskine449bd832023-01-11 14:50:10 +0100781static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
782 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000783{
Gilles Peskine449bd832023-01-11 14:50:10 +0100784 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000785}
Yanray Wangdb9b3092023-08-24 15:47:53 +0800786#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +0000787
Gilles Peskine449bd832023-01-11 14:50:10 +0100788static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
789 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000790{
Gilles Peskine449bd832023-01-11 14:50:10 +0100791 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000792}
793
Gilles Peskine449bd832023-01-11 14:50:10 +0100794static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000795{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200796 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100797 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200798
Gilles Peskine449bd832023-01-11 14:50:10 +0100799 if (ctx == NULL) {
800 return NULL;
801 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200802
Gilles Peskine449bd832023-01-11 14:50:10 +0100803 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200804
Gilles Peskine449bd832023-01-11 14:50:10 +0100805 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000806}
807
Gilles Peskine449bd832023-01-11 14:50:10 +0100808static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000809{
Gilles Peskine449bd832023-01-11 14:50:10 +0100810 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
811 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000812}
813
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200814static const mbedtls_cipher_base_t camellia_info = {
815 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200816 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200817#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000818 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100819#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200820#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000821 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100822#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100823#if defined(MBEDTLS_CIPHER_MODE_OFB)
824 NULL,
825#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200826#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000827 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100828#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100829#if defined(MBEDTLS_CIPHER_MODE_XTS)
830 NULL,
831#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200832#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200833 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100834#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000835 camellia_setkey_enc_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800836#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Paul Bakker343a8702011-06-09 14:27:58 +0000837 camellia_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800838#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000839 camellia_ctx_alloc,
840 camellia_ctx_free
841};
842
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200843static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100844 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100845 16,
846 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100847 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100848 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100849 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200850 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100851 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200852};
853
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200854static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100855 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100856 16,
857 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100858 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100859 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100860 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200861 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100862 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200863};
864
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200865static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100866 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100867 16,
868 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100869 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100870 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100871 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200872 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100873 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200874};
875
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200876#if defined(MBEDTLS_CIPHER_MODE_CBC)
877static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100878 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100879 16,
880 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100881 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100882 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100883 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200884 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100885 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000886};
887
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200888static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100889 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100890 16,
891 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100892 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100893 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100894 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200895 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100896 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000897};
898
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200899static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100900 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100901 16,
902 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100903 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100904 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100905 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200906 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100907 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000908};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200909#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000910
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200911#if defined(MBEDTLS_CIPHER_MODE_CFB)
912static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100913 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100914 16,
915 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100916 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100917 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100918 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200919 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100920 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000921};
922
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200923static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100924 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100925 16,
926 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100927 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100928 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100929 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200930 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100931 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000932};
933
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200934static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100935 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100936 16,
937 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100938 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100939 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100940 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200941 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100942 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000943};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200944#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000945
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200946#if defined(MBEDTLS_CIPHER_MODE_CTR)
947static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100948 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100949 16,
950 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100951 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100952 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100953 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200954 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100955 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000956};
957
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200958static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100959 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100960 16,
961 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100962 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100963 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100964 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200965 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100966 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000967};
968
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200969static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100970 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100971 16,
972 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100973 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100974 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100975 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200976 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100977 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000978};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200979#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000980
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200981#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100982static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
983 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200984{
Gilles Peskine449bd832023-01-11 14:50:10 +0100985 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
986 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200987}
988
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200989static const mbedtls_cipher_base_t gcm_camellia_info = {
990 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200991 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200992#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200993 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100994#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200995#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200996 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100997#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100998#if defined(MBEDTLS_CIPHER_MODE_OFB)
999 NULL,
1000#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001001#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001002 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001003#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001004#if defined(MBEDTLS_CIPHER_MODE_XTS)
1005 NULL,
1006#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001007#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001008 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001009#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001010 gcm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001011#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001012 gcm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001013#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001014 gcm_ctx_alloc,
1015 gcm_ctx_free,
1016};
1017
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001018static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001019 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001020 16,
1021 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001022 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001023 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001024 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001025 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001026 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001027};
1028
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001029static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001030 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001031 16,
1032 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001033 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001034 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001035 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001036 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001037 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001038};
1039
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001040static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001041 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001042 16,
1043 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001044 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001045 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001046 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001047 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001048 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001049};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001050#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001051
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001052#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001053static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1054 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001055{
Gilles Peskine449bd832023-01-11 14:50:10 +01001056 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1057 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001058}
1059
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001060static const mbedtls_cipher_base_t ccm_camellia_info = {
1061 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001062 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001063#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001064 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001065#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001066#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001067 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001068#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001069#if defined(MBEDTLS_CIPHER_MODE_OFB)
1070 NULL,
1071#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001072#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001073 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001074#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001075#if defined(MBEDTLS_CIPHER_MODE_XTS)
1076 NULL,
1077#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001078#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001079 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001080#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001081 ccm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001082#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001083 ccm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001084#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001085 ccm_ctx_alloc,
1086 ccm_ctx_free,
1087};
1088
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001089static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001090 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001091 16,
1092 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001093 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001094 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001095 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001096 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001097 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001098};
1099
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001100static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001101 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001102 16,
1103 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001104 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001105 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001106 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001107 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001108 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001109};
1110
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001111static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001112 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001113 16,
1114 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001115 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001116 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001117 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001118 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001119 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001120};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001121
1122static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001123 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001124 16,
1125 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001126 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001127 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001128 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001129 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001130 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001131};
1132
1133static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001134 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001135 16,
1136 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001137 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001138 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001139 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001140 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001141 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001142};
1143
1144static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001145 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001146 16,
1147 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001148 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001149 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001150 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001151 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001152 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001153};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001154#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001155
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001156#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001157
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001158#if defined(MBEDTLS_ARIA_C)
1159
Gilles Peskine449bd832023-01-11 14:50:10 +01001160static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1161 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001162{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001163 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001164 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1165 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001166}
1167
1168#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001169static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1170 size_t length, unsigned char *iv,
1171 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001172{
Gilles Peskine449bd832023-01-11 14:50:10 +01001173 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1174 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001175}
1176#endif /* MBEDTLS_CIPHER_MODE_CBC */
1177
1178#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001179static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1180 size_t length, size_t *iv_off, unsigned char *iv,
1181 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001182{
Gilles Peskine449bd832023-01-11 14:50:10 +01001183 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1184 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001185}
1186#endif /* MBEDTLS_CIPHER_MODE_CFB */
1187
1188#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001189static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1190 unsigned char *nonce_counter, unsigned char *stream_block,
1191 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001192{
Gilles Peskine449bd832023-01-11 14:50:10 +01001193 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1194 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001195}
1196#endif /* MBEDTLS_CIPHER_MODE_CTR */
1197
Yanray Wangdb9b3092023-08-24 15:47:53 +08001198#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Gilles Peskine449bd832023-01-11 14:50:10 +01001199static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1200 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001201{
Gilles Peskine449bd832023-01-11 14:50:10 +01001202 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001203}
Yanray Wangdb9b3092023-08-24 15:47:53 +08001204#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001205
Gilles Peskine449bd832023-01-11 14:50:10 +01001206static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1207 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001208{
Gilles Peskine449bd832023-01-11 14:50:10 +01001209 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001210}
1211
Gilles Peskine449bd832023-01-11 14:50:10 +01001212static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001213{
1214 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001215 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001216
Gilles Peskine449bd832023-01-11 14:50:10 +01001217 if (ctx == NULL) {
1218 return NULL;
1219 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001220
Gilles Peskine449bd832023-01-11 14:50:10 +01001221 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001222
Gilles Peskine449bd832023-01-11 14:50:10 +01001223 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001224}
1225
Gilles Peskine449bd832023-01-11 14:50:10 +01001226static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001227{
Gilles Peskine449bd832023-01-11 14:50:10 +01001228 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1229 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001230}
1231
1232static const mbedtls_cipher_base_t aria_info = {
1233 MBEDTLS_CIPHER_ID_ARIA,
1234 aria_crypt_ecb_wrap,
1235#if defined(MBEDTLS_CIPHER_MODE_CBC)
1236 aria_crypt_cbc_wrap,
1237#endif
1238#if defined(MBEDTLS_CIPHER_MODE_CFB)
1239 aria_crypt_cfb128_wrap,
1240#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001241#if defined(MBEDTLS_CIPHER_MODE_OFB)
1242 NULL,
1243#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001244#if defined(MBEDTLS_CIPHER_MODE_CTR)
1245 aria_crypt_ctr_wrap,
1246#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001247#if defined(MBEDTLS_CIPHER_MODE_XTS)
1248 NULL,
1249#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001250#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1251 NULL,
1252#endif
1253 aria_setkey_enc_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001254#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001255 aria_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001256#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001257 aria_ctx_alloc,
1258 aria_ctx_free
1259};
1260
1261static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001262 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001263 16,
1264 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001265 128 >> 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_128_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
1272static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001273 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001274 16,
1275 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001276 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001277 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001278 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001279 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001280 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001281};
1282
1283static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001284 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001285 16,
1286 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001287 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001288 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001289 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001290 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001291 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001292};
1293
1294#if defined(MBEDTLS_CIPHER_MODE_CBC)
1295static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001296 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001297 16,
1298 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001299 128 >> 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_128_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
1306static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001307 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001308 16,
1309 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001310 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001311 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001312 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001313 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001314 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001315};
1316
1317static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001318 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001319 16,
1320 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001321 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001322 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001323 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001324 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001325 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001326};
1327#endif /* MBEDTLS_CIPHER_MODE_CBC */
1328
1329#if defined(MBEDTLS_CIPHER_MODE_CFB)
1330static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001331 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001332 16,
1333 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001334 128 >> 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_128_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
1341static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001342 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001343 16,
1344 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001345 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001346 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001347 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001348 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001349 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001350};
1351
1352static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001353 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001354 16,
1355 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001356 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001357 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001358 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001359 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001360 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001361};
1362#endif /* MBEDTLS_CIPHER_MODE_CFB */
1363
1364#if defined(MBEDTLS_CIPHER_MODE_CTR)
1365static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001366 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001367 16,
1368 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001369 128 >> 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_128_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
1376static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001377 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001378 16,
1379 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001380 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001381 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001382 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001383 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001384 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001385};
1386
1387static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001388 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001389 16,
1390 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001391 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001392 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001393 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001394 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001395 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001396};
1397#endif /* MBEDTLS_CIPHER_MODE_CTR */
1398
1399#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001400static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1401 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001402{
Gilles Peskine449bd832023-01-11 14:50:10 +01001403 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1404 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001405}
1406
1407static const mbedtls_cipher_base_t gcm_aria_info = {
1408 MBEDTLS_CIPHER_ID_ARIA,
1409 NULL,
1410#if defined(MBEDTLS_CIPHER_MODE_CBC)
1411 NULL,
1412#endif
1413#if defined(MBEDTLS_CIPHER_MODE_CFB)
1414 NULL,
1415#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001416#if defined(MBEDTLS_CIPHER_MODE_OFB)
1417 NULL,
1418#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001419#if defined(MBEDTLS_CIPHER_MODE_CTR)
1420 NULL,
1421#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001422#if defined(MBEDTLS_CIPHER_MODE_XTS)
1423 NULL,
1424#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001425#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1426 NULL,
1427#endif
1428 gcm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001429#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001430 gcm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001431#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001432 gcm_ctx_alloc,
1433 gcm_ctx_free,
1434};
1435
1436static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001437 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001438 16,
1439 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001440 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001441 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001442 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001443 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001444 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001445};
1446
1447static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001448 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001449 16,
1450 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001451 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001452 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001453 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001454 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001455 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001456};
1457
1458static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001459 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001460 16,
1461 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001462 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001463 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001464 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001465 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001466 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001467};
1468#endif /* MBEDTLS_GCM_C */
1469
1470#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001471static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1472 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001473{
Gilles Peskine449bd832023-01-11 14:50:10 +01001474 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1475 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001476}
1477
1478static const mbedtls_cipher_base_t ccm_aria_info = {
1479 MBEDTLS_CIPHER_ID_ARIA,
1480 NULL,
1481#if defined(MBEDTLS_CIPHER_MODE_CBC)
1482 NULL,
1483#endif
1484#if defined(MBEDTLS_CIPHER_MODE_CFB)
1485 NULL,
1486#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001487#if defined(MBEDTLS_CIPHER_MODE_OFB)
1488 NULL,
1489#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001490#if defined(MBEDTLS_CIPHER_MODE_CTR)
1491 NULL,
1492#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001493#if defined(MBEDTLS_CIPHER_MODE_XTS)
1494 NULL,
1495#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001496#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1497 NULL,
1498#endif
1499 ccm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001500#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001501 ccm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001502#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001503 ccm_ctx_alloc,
1504 ccm_ctx_free,
1505};
1506
1507static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001508 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001509 16,
1510 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001511 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001512 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001513 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001514 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001515 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001516};
1517
1518static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001519 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001520 16,
1521 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001522 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001523 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001524 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001525 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001526 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001527};
1528
1529static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001530 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001531 16,
1532 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001533 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001534 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001535 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001536 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001537 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001538};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001539
1540static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001541 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001542 16,
1543 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001544 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001545 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001546 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001547 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001548 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001549};
1550
1551static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001552 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001553 16,
1554 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001555 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001556 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001557 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001558 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001559 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001560};
1561
1562static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001563 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001564 16,
1565 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001566 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001567 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001568 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001569 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001570 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001571};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001572#endif /* MBEDTLS_CCM_C */
1573
1574#endif /* MBEDTLS_ARIA_C */
1575
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001576#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001577
Gilles Peskine449bd832023-01-11 14:50:10 +01001578static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1579 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001580{
1581 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001582 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001583}
1584
Gilles Peskine449bd832023-01-11 14:50:10 +01001585static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1586 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001587{
1588 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001589 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001590}
1591
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001592#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001593static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1594 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001595{
Gilles Peskine449bd832023-01-11 14:50:10 +01001596 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1597 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001598}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001599#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001600
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001601#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001602static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1603 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001604{
Gilles Peskine449bd832023-01-11 14:50:10 +01001605 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1606 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001607}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001608#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001609
Yanray Wangdb9b3092023-08-24 15:47:53 +08001610#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Gilles Peskine449bd832023-01-11 14:50:10 +01001611static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1612 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001613{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001614 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001615
Gilles Peskine449bd832023-01-11 14:50:10 +01001616 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001617}
Yanray Wangdb9b3092023-08-24 15:47:53 +08001618#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +00001619
Gilles Peskine449bd832023-01-11 14:50:10 +01001620static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1621 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001622{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001623 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001624
Gilles Peskine449bd832023-01-11 14:50:10 +01001625 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001626}
1627
Yanray Wangdb9b3092023-08-24 15:47:53 +08001628#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Gilles Peskine449bd832023-01-11 14:50:10 +01001629static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1630 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001631{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001632 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001633
Gilles Peskine449bd832023-01-11 14:50:10 +01001634 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001635}
Yanray Wangdb9b3092023-08-24 15:47:53 +08001636#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +00001637
Gilles Peskine449bd832023-01-11 14:50:10 +01001638static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1639 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001640{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001641 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001642
Gilles Peskine449bd832023-01-11 14:50:10 +01001643 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001644}
1645
Yanray Wangdb9b3092023-08-24 15:47:53 +08001646#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Gilles Peskine449bd832023-01-11 14:50:10 +01001647static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1648 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001649{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001650 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001651
Gilles Peskine449bd832023-01-11 14:50:10 +01001652 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001653}
Yanray Wangdb9b3092023-08-24 15:47:53 +08001654#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +00001655
Gilles Peskine449bd832023-01-11 14:50:10 +01001656static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1657 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001658{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001659 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001660
Gilles Peskine449bd832023-01-11 14:50:10 +01001661 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001662}
1663
Gilles Peskine449bd832023-01-11 14:50:10 +01001664static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001665{
Gilles Peskine449bd832023-01-11 14:50:10 +01001666 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001667
Gilles Peskine449bd832023-01-11 14:50:10 +01001668 if (des == NULL) {
1669 return NULL;
1670 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001671
Gilles Peskine449bd832023-01-11 14:50:10 +01001672 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001673
Gilles Peskine449bd832023-01-11 14:50:10 +01001674 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001675}
1676
Gilles Peskine449bd832023-01-11 14:50:10 +01001677static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001678{
Gilles Peskine449bd832023-01-11 14:50:10 +01001679 mbedtls_des_free((mbedtls_des_context *) ctx);
1680 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001681}
1682
Gilles Peskine449bd832023-01-11 14:50:10 +01001683static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001684{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001685 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001686 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001687
Gilles Peskine449bd832023-01-11 14:50:10 +01001688 if (des3 == NULL) {
1689 return NULL;
1690 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001691
Gilles Peskine449bd832023-01-11 14:50:10 +01001692 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001693
Gilles Peskine449bd832023-01-11 14:50:10 +01001694 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001695}
1696
Gilles Peskine449bd832023-01-11 14:50:10 +01001697static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001698{
Gilles Peskine449bd832023-01-11 14:50:10 +01001699 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1700 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001701}
1702
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001703static const mbedtls_cipher_base_t des_info = {
1704 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001705 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001706#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001707 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001708#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001709#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001710 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001711#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001712#if defined(MBEDTLS_CIPHER_MODE_OFB)
1713 NULL,
1714#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001715#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001716 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001717#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001718#if defined(MBEDTLS_CIPHER_MODE_XTS)
1719 NULL,
1720#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001721#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001722 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001723#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001724 des_setkey_enc_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001725#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Paul Bakker23986e52011-04-24 08:57:21 +00001726 des_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001727#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001728 des_ctx_alloc,
1729 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001730};
1731
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001732static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001733 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001734 8,
1735 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001736 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001737 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001738 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001739 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001740 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001741};
1742
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001743#if defined(MBEDTLS_CIPHER_MODE_CBC)
1744static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001745 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001746 8,
1747 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001748 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001749 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001750 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001751 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001752 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001753};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001754#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001755
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001756static const mbedtls_cipher_base_t des_ede_info = {
1757 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001758 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001759#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001760 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001761#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001762#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001763 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001764#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001765#if defined(MBEDTLS_CIPHER_MODE_OFB)
1766 NULL,
1767#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001768#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001769 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001770#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001771#if defined(MBEDTLS_CIPHER_MODE_XTS)
1772 NULL,
1773#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001774#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001775 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001776#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001777 des3_set2key_enc_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001778#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Paul Bakker23986e52011-04-24 08:57:21 +00001779 des3_set2key_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001780#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001781 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001782 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001783};
1784
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001785static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001786 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001787 8,
1788 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001789 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001790 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001791 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001792 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001793 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001794};
1795
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001796#if defined(MBEDTLS_CIPHER_MODE_CBC)
1797static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001798 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001799 8,
1800 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001801 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001802 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001803 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001804 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001805 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001806};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001807#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001808
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001809static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001810 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001811 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001812#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001813 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001814#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001815#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001816 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001817#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001818#if defined(MBEDTLS_CIPHER_MODE_OFB)
1819 NULL,
1820#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001821#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001822 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001823#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001824#if defined(MBEDTLS_CIPHER_MODE_XTS)
1825 NULL,
1826#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001827#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001828 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001829#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001830 des3_set3key_enc_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001831#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Paul Bakker343a8702011-06-09 14:27:58 +00001832 des3_set3key_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001833#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001834 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001835 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001836};
1837
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001838static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001839 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001840 8,
1841 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001842 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001843 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001844 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001845 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001846 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001847};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001848#if defined(MBEDTLS_CIPHER_MODE_CBC)
1849static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001850 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001851 8,
1852 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001853 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001854 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001855 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001856 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001857 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001858};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001859#endif /* MBEDTLS_CIPHER_MODE_CBC */
1860#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001861
Daniel Kingbd920622016-05-15 19:56:20 -03001862#if defined(MBEDTLS_CHACHA20_C)
1863
Gilles Peskine449bd832023-01-11 14:50:10 +01001864static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1865 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001866{
Gilles Peskine449bd832023-01-11 14:50:10 +01001867 if (key_bitlen != 256U) {
1868 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1869 }
Daniel Kingbd920622016-05-15 19:56:20 -03001870
Gilles Peskine449bd832023-01-11 14:50:10 +01001871 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1872 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1873 }
Daniel Kingbd920622016-05-15 19:56:20 -03001874
Gilles Peskine449bd832023-01-11 14:50:10 +01001875 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001876}
1877
Gilles Peskine449bd832023-01-11 14:50:10 +01001878static int chacha20_stream_wrap(void *ctx, size_t length,
1879 const unsigned char *input,
1880 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001881{
Janos Follath24eed8d2019-11-22 13:21:35 +00001882 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001883
Gilles Peskine449bd832023-01-11 14:50:10 +01001884 ret = mbedtls_chacha20_update(ctx, length, input, output);
1885 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1886 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1887 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001888
Gilles Peskine449bd832023-01-11 14:50:10 +01001889 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001890}
1891
Gilles Peskine449bd832023-01-11 14:50:10 +01001892static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001893{
1894 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001895 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001896
Gilles Peskine449bd832023-01-11 14:50:10 +01001897 if (ctx == NULL) {
1898 return NULL;
1899 }
Daniel Kingbd920622016-05-15 19:56:20 -03001900
Gilles Peskine449bd832023-01-11 14:50:10 +01001901 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001902
Gilles Peskine449bd832023-01-11 14:50:10 +01001903 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001904}
1905
Gilles Peskine449bd832023-01-11 14:50:10 +01001906static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001907{
Gilles Peskine449bd832023-01-11 14:50:10 +01001908 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1909 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001910}
1911
1912static const mbedtls_cipher_base_t chacha20_base_info = {
1913 MBEDTLS_CIPHER_ID_CHACHA20,
1914 NULL,
1915#if defined(MBEDTLS_CIPHER_MODE_CBC)
1916 NULL,
1917#endif
1918#if defined(MBEDTLS_CIPHER_MODE_CFB)
1919 NULL,
1920#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001921#if defined(MBEDTLS_CIPHER_MODE_OFB)
1922 NULL,
1923#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001924#if defined(MBEDTLS_CIPHER_MODE_CTR)
1925 NULL,
1926#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001927#if defined(MBEDTLS_CIPHER_MODE_XTS)
1928 NULL,
1929#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001930#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001931 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001932#endif
1933 chacha20_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001934#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Daniel Kingbd920622016-05-15 19:56:20 -03001935 chacha20_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001936#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001937 chacha20_ctx_alloc,
1938 chacha20_ctx_free
1939};
1940static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001941 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001942 1,
1943 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001944 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001945 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001946 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001947 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001948 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001949};
1950#endif /* MBEDTLS_CHACHA20_C */
1951
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001952#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001953
Gilles Peskine449bd832023-01-11 14:50:10 +01001954static int chachapoly_setkey_wrap(void *ctx,
1955 const unsigned char *key,
1956 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001957{
Gilles Peskine449bd832023-01-11 14:50:10 +01001958 if (key_bitlen != 256U) {
1959 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1960 }
Daniel King8fe47012016-05-17 20:33:28 -03001961
Gilles Peskine449bd832023-01-11 14:50:10 +01001962 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1963 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1964 }
Daniel King8fe47012016-05-17 20:33:28 -03001965
Gilles Peskine449bd832023-01-11 14:50:10 +01001966 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001967}
1968
Gilles Peskine449bd832023-01-11 14:50:10 +01001969static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001970{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001971 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001972 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001973
Gilles Peskine449bd832023-01-11 14:50:10 +01001974 if (ctx == NULL) {
1975 return NULL;
1976 }
Daniel King8fe47012016-05-17 20:33:28 -03001977
Gilles Peskine449bd832023-01-11 14:50:10 +01001978 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001979
Gilles Peskine449bd832023-01-11 14:50:10 +01001980 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001981}
1982
Gilles Peskine449bd832023-01-11 14:50:10 +01001983static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001984{
Gilles Peskine449bd832023-01-11 14:50:10 +01001985 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1986 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001987}
1988
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001989static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001990 MBEDTLS_CIPHER_ID_CHACHA20,
1991 NULL,
1992#if defined(MBEDTLS_CIPHER_MODE_CBC)
1993 NULL,
1994#endif
1995#if defined(MBEDTLS_CIPHER_MODE_CFB)
1996 NULL,
1997#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001998#if defined(MBEDTLS_CIPHER_MODE_OFB)
1999 NULL,
2000#endif
Daniel King8fe47012016-05-17 20:33:28 -03002001#if defined(MBEDTLS_CIPHER_MODE_CTR)
2002 NULL,
2003#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002004#if defined(MBEDTLS_CIPHER_MODE_XTS)
2005 NULL,
2006#endif
Daniel King8fe47012016-05-17 20:33:28 -03002007#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2008 NULL,
2009#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002010 chachapoly_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002011#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002012 chachapoly_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002013#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002014 chachapoly_ctx_alloc,
2015 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002016};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002017static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002018 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002019 1,
2020 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002021 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002022 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002023 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002024 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002025 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002026};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002027#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002028
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002029#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002030static int null_crypt_stream(void *ctx, size_t length,
2031 const unsigned char *input,
2032 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002033{
2034 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002035 memmove(output, input, length);
2036 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002037}
2038
Gilles Peskine449bd832023-01-11 14:50:10 +01002039static int null_setkey(void *ctx, const unsigned char *key,
2040 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002041{
2042 ((void) ctx);
2043 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002044 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002045
Gilles Peskine449bd832023-01-11 14:50:10 +01002046 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002047}
2048
Gilles Peskine449bd832023-01-11 14:50:10 +01002049static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002050{
Gilles Peskine449bd832023-01-11 14:50:10 +01002051 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002052}
2053
Gilles Peskine449bd832023-01-11 14:50:10 +01002054static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002055{
2056 ((void) ctx);
2057}
2058
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002059static const mbedtls_cipher_base_t null_base_info = {
2060 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002061 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002062#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002063 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002064#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002065#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002066 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002067#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002068#if defined(MBEDTLS_CIPHER_MODE_OFB)
2069 NULL,
2070#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002071#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002072 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002073#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002074#if defined(MBEDTLS_CIPHER_MODE_XTS)
2075 NULL,
2076#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002077#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002078 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002079#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002080 null_setkey,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002081#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002082 null_setkey,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002083#endif
Paul Bakkerfab5c822012-02-06 16:45:10 +00002084 null_ctx_alloc,
2085 null_ctx_free
2086};
2087
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002088static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002089 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002090 1,
2091 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002092 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002093 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002094 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002095 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002096 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002097};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002098#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002099
Jack Lloydffdf2882019-03-07 17:00:32 -05002100#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002101static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002102{
Gilles Peskine449bd832023-01-11 14:50:10 +01002103 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002104
Gilles Peskine449bd832023-01-11 14:50:10 +01002105 if (ctx != NULL) {
2106 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2107 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002108
Gilles Peskine449bd832023-01-11 14:50:10 +01002109 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002110}
2111
Gilles Peskine449bd832023-01-11 14:50:10 +01002112static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002113{
Gilles Peskine449bd832023-01-11 14:50:10 +01002114 mbedtls_nist_kw_free(ctx);
2115 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002116}
2117
Gilles Peskine449bd832023-01-11 14:50:10 +01002118static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2119 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002120{
Gilles Peskine449bd832023-01-11 14:50:10 +01002121 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2122 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002123}
2124
Gilles Peskine449bd832023-01-11 14:50:10 +01002125static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2126 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002127{
Gilles Peskine449bd832023-01-11 14:50:10 +01002128 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2129 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002130}
2131
2132static const mbedtls_cipher_base_t kw_aes_info = {
2133 MBEDTLS_CIPHER_ID_AES,
2134 NULL,
2135#if defined(MBEDTLS_CIPHER_MODE_CBC)
2136 NULL,
2137#endif
2138#if defined(MBEDTLS_CIPHER_MODE_CFB)
2139 NULL,
2140#endif
2141#if defined(MBEDTLS_CIPHER_MODE_OFB)
2142 NULL,
2143#endif
2144#if defined(MBEDTLS_CIPHER_MODE_CTR)
2145 NULL,
2146#endif
2147#if defined(MBEDTLS_CIPHER_MODE_XTS)
2148 NULL,
2149#endif
2150#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2151 NULL,
2152#endif
2153 kw_aes_setkey_wrap,
2154 kw_aes_setkey_unwrap,
2155 kw_ctx_alloc,
2156 kw_ctx_free,
2157};
2158
2159static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002160 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002161 16,
2162 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002163 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002164 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002165 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002166 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002167 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002168};
2169
2170static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002171 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002172 16,
2173 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002174 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002175 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002176 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002177 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002178 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002179};
2180
2181static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002182 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002183 16,
2184 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002185 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002186 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002187 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002188 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002189 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002190};
2191
2192static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002193 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002194 16,
2195 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002196 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002197 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002198 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002199 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002200 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002201};
2202
2203static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002204 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002205 16,
2206 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002207 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002208 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002209 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002210 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002211 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002212};
2213
2214static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002215 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002216 16,
2217 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002218 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002219 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002220 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002221 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002222 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002223};
2224#endif /* MBEDTLS_NIST_KW_C */
2225
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002226const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002227{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002228#if defined(MBEDTLS_AES_C)
2229 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2230 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2231 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2232#if defined(MBEDTLS_CIPHER_MODE_CBC)
2233 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2234 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2235 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002236#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002237#if defined(MBEDTLS_CIPHER_MODE_CFB)
2238 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2239 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2240 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002241#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002242#if defined(MBEDTLS_CIPHER_MODE_OFB)
2243 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2244 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2245 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2246#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002247#if defined(MBEDTLS_CIPHER_MODE_CTR)
2248 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2249 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2250 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002251#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002252#if defined(MBEDTLS_CIPHER_MODE_XTS)
2253 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2254 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2255#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002256#if defined(MBEDTLS_GCM_C)
2257 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2258 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2259 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002260#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002261#if defined(MBEDTLS_CCM_C)
2262 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2263 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2264 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002265 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
2266 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2267 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002268#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002269#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002270
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002271#if defined(MBEDTLS_CAMELLIA_C)
2272 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2273 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2274 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2275#if defined(MBEDTLS_CIPHER_MODE_CBC)
2276 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2277 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2278 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002279#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002280#if defined(MBEDTLS_CIPHER_MODE_CFB)
2281 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2282 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2283 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002284#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002285#if defined(MBEDTLS_CIPHER_MODE_CTR)
2286 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2287 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2288 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002289#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002290#if defined(MBEDTLS_GCM_C)
2291 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2292 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2293 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002294#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002295#if defined(MBEDTLS_CCM_C)
2296 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2297 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2298 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002299 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2300 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2301 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002302#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002303#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002304
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002305#if defined(MBEDTLS_ARIA_C)
2306 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2307 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2308 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2309#if defined(MBEDTLS_CIPHER_MODE_CBC)
2310 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2311 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2312 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2313#endif
2314#if defined(MBEDTLS_CIPHER_MODE_CFB)
2315 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2316 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2317 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2318#endif
2319#if defined(MBEDTLS_CIPHER_MODE_CTR)
2320 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2321 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2322 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2323#endif
2324#if defined(MBEDTLS_GCM_C)
2325 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2326 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2327 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2328#endif
2329#if defined(MBEDTLS_CCM_C)
2330 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2331 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2332 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002333 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2334 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2335 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002336#endif
2337#endif /* MBEDTLS_ARIA_C */
2338
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002339#if defined(MBEDTLS_DES_C)
2340 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2341 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2342 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2343#if defined(MBEDTLS_CIPHER_MODE_CBC)
2344 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2345 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2346 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002347#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002348#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002349
Daniel Kingbd920622016-05-15 19:56:20 -03002350#if defined(MBEDTLS_CHACHA20_C)
2351 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2352#endif
2353
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002354#if defined(MBEDTLS_CHACHAPOLY_C)
2355 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002356#endif
2357
Jack Lloydffdf2882019-03-07 17:00:32 -05002358#if defined(MBEDTLS_NIST_KW_C)
2359 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2360 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2361 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2362 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2363 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2364 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2365#endif
2366
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002367#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2368 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2369#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002370
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002371 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002372};
2373
Gilles Peskine449bd832023-01-11 14:50:10 +01002374#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2375 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002376int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002377
Dave Rodgman3b46b772023-06-24 13:25:06 +01002378const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002379#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002380 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002381#endif
2382#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002383 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002384#endif
2385#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002386 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002387#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002388#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002389 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002390#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002391#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002392 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002393#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002394#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002395 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002396#endif
2397#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002398 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002399#endif
2400#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002401 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002402#endif
2403#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002404 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002405#endif
2406#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002407 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002408#endif
2409#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002410 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002411#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002412#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002413 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002414#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002415#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002416 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002417#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002418#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002419 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002420#endif
2421#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002422 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002423#endif
2424#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002425 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002426#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002427#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002428 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002429#endif
2430};
2431
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002432#endif /* MBEDTLS_CIPHER_C */