blob: b44ca9c3bb2f71d919e1dde53dfc3078fac1e756 [file] [log] [blame]
Paul Bakker8123e9d2011-01-06 15:37:30 +00001/**
Paul Bakkerfae35f02013-03-13 10:33:51 +01002 * \file cipher_wrap.c
Paul Bakker9af723c2014-05-01 13:03:14 +02003 *
Gilles Peskinee820c0a2023-08-03 17:45:20 +02004 * \brief Generic cipher wrapper for Mbed TLS
Paul Bakker8123e9d2011-01-06 15:37:30 +00005 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
7 *
Bence Szépkúti1e148272020-08-07 13:07:28 +02008 * Copyright The Mbed TLS Contributors
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +02009 * SPDX-License-Identifier: Apache-2.0
10 *
11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
12 * not use this file except in compliance with the License.
13 * You may obtain a copy of the License at
14 *
15 * http://www.apache.org/licenses/LICENSE-2.0
16 *
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
Paul Bakker8123e9d2011-01-06 15:37:30 +000022 */
23
Gilles Peskinedb09ef62020-06-03 01:43:33 +020024#include "common.h"
Paul Bakker8123e9d2011-01-06 15:37:30 +000025
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020026#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000027
Chris Jonesdaacb592021-03-09 17:03:29 +000028#include "cipher_wrap.h"
Janos Follath24eed8d2019-11-22 13:21:35 +000029#include "mbedtls/error.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000030
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +020031#if defined(MBEDTLS_CHACHAPOLY_C)
32#include "mbedtls/chachapoly.h"
Daniel King8fe47012016-05-17 20:33:28 -030033#endif
34
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000036#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000037#endif
38
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020039#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000040#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000041#endif
42
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000043#if defined(MBEDTLS_ARIA_C)
44#include "mbedtls/aria.h"
45#endif
46
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000048#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000049#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000050
Daniel Kingbd920622016-05-15 19:56:20 -030051#if defined(MBEDTLS_CHACHA20_C)
52#include "mbedtls/chacha20.h"
53#endif
54
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000056#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020057#endif
58
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000060#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020061#endif
62
Jack Lloydffdf2882019-03-07 17:00:32 -050063#if defined(MBEDTLS_NIST_KW_C)
64#include "mbedtls/nist_kw.h"
65#endif
66
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000068#include <string.h>
69#endif
70
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000071#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020072
Dave Rodgman25d77cb2023-06-24 22:58:51 +010073enum mbedtls_cipher_base_index {
74#if defined(MBEDTLS_AES_C)
75 MBEDTLS_CIPHER_BASE_INDEX_AES,
76#endif
77#if defined(MBEDTLS_ARIA_C)
78 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
79#endif
80#if defined(MBEDTLS_CAMELLIA_C)
81 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
82#endif
83#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
84 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
85#endif
86#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
87 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
88#endif
89#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
90 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
91#endif
92#if defined(MBEDTLS_CHACHA20_C)
93 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
94#endif
95#if defined(MBEDTLS_CHACHAPOLY_C)
96 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
97#endif
98#if defined(MBEDTLS_DES_C)
99 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
100#endif
101#if defined(MBEDTLS_DES_C)
102 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
103#endif
104#if defined(MBEDTLS_DES_C)
105 MBEDTLS_CIPHER_BASE_INDEX_DES,
106#endif
107#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
108 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
109#endif
110#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
111 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
112#endif
113#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
114 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
115#endif
116#if defined(MBEDTLS_NIST_KW_C)
117 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
118#endif
119#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
120 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
121#endif
122#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100123 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100124#endif
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100125 /* Prevent compile failure due to empty enum */
Dave Rodgmane3330f82023-08-14 15:26:28 +0100126 MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100127};
Dave Rodgmande3de772023-06-24 12:51:06 +0100128
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200129#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200130/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100131static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200132{
Gilles Peskine449bd832023-01-11 14:50:10 +0100133 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200134
Gilles Peskine449bd832023-01-11 14:50:10 +0100135 if (ctx != NULL) {
136 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
137 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200138
Gilles Peskine449bd832023-01-11 14:50:10 +0100139 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200140}
141
Gilles Peskine449bd832023-01-11 14:50:10 +0100142static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200143{
Gilles Peskine449bd832023-01-11 14:50:10 +0100144 mbedtls_gcm_free(ctx);
145 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200146}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200147#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200148
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200149#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200150/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100151static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200152{
Gilles Peskine449bd832023-01-11 14:50:10 +0100153 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200154
Gilles Peskine449bd832023-01-11 14:50:10 +0100155 if (ctx != NULL) {
156 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
157 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200158
Gilles Peskine449bd832023-01-11 14:50:10 +0100159 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200160}
161
Gilles Peskine449bd832023-01-11 14:50:10 +0100162static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200163{
Gilles Peskine449bd832023-01-11 14:50:10 +0100164 mbedtls_ccm_free(ctx);
165 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200166}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200167#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200168
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200169#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000170
Gilles Peskine449bd832023-01-11 14:50:10 +0100171static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
172 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200173{
Gilles Peskine449bd832023-01-11 14:50:10 +0100174 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200175}
176
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200177#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100178static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
179 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000180{
Gilles Peskine449bd832023-01-11 14:50:10 +0100181 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
182 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000183}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200184#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000185
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200186#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100187static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
188 size_t length, size_t *iv_off, unsigned char *iv,
189 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000190{
Gilles Peskine449bd832023-01-11 14:50:10 +0100191 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
192 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000193}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200194#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000195
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100196#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100197static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
198 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100199{
Gilles Peskine449bd832023-01-11 14:50:10 +0100200 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
201 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100202}
203#endif /* MBEDTLS_CIPHER_MODE_OFB */
204
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200205#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100206static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
207 unsigned char *nonce_counter, unsigned char *stream_block,
208 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000209{
Gilles Peskine449bd832023-01-11 14:50:10 +0100210 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
211 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000212}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200213#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000214
Jaeden Ameroc6539902018-04-30 17:17:41 +0100215#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100216static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
217 size_t length,
218 const unsigned char data_unit[16],
219 const unsigned char *input,
220 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100221{
222 mbedtls_aes_xts_context *xts_ctx = ctx;
223 int mode;
224
Gilles Peskine449bd832023-01-11 14:50:10 +0100225 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100226 case MBEDTLS_ENCRYPT:
227 mode = MBEDTLS_AES_ENCRYPT;
228 break;
229 case MBEDTLS_DECRYPT:
230 mode = MBEDTLS_AES_DECRYPT;
231 break;
232 default:
233 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
234 }
235
Gilles Peskine449bd832023-01-11 14:50:10 +0100236 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
237 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100238}
239#endif /* MBEDTLS_CIPHER_MODE_XTS */
240
Yanray Wangb67b4742023-10-31 17:10:32 +0800241#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
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 Wangb67b4742023-10-31 17:10:32 +0800296#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
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
Yanray Wang7732ced2023-09-14 13:51:14 +0800314#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200315static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100316 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100317 16,
318 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100319 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100320 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100321 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200322 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100323 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200324};
325
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200326static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100327 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100328 16,
329 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100330 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100331 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100332 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200333 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100334 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200335};
Yanray Wang7732ced2023-09-14 13:51:14 +0800336#endif
Paul Bakker5e0efa72013-09-08 23:04:04 +0200337
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200338#if defined(MBEDTLS_CIPHER_MODE_CBC)
339static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100340 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100341 16,
342 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100343 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100344 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100345 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200346 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100347 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000348};
349
Yanray Wang7732ced2023-09-14 13:51:14 +0800350#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200351static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100352 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100353 16,
354 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100355 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100356 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100357 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200358 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100359 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000360};
361
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200362static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100363 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100364 16,
365 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100366 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100367 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100368 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200369 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100370 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000371};
Yanray Wang7732ced2023-09-14 13:51:14 +0800372#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200373#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000374
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200375#if defined(MBEDTLS_CIPHER_MODE_CFB)
376static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100377 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100378 16,
379 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100380 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100381 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100382 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200383 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100384 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000385};
386
Yanray Wang7732ced2023-09-14 13:51:14 +0800387#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200388static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100389 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100390 16,
391 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100392 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100393 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100394 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200395 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100396 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000397};
398
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200399static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100400 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100401 16,
402 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100403 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100404 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100405 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200406 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100407 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000408};
Yanray Wang7732ced2023-09-14 13:51:14 +0800409#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200410#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000411
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100412#if defined(MBEDTLS_CIPHER_MODE_OFB)
413static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100414 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100415 16,
416 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100417 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100418 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100419 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100420 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100421 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100422};
423
Yanray Wang7732ced2023-09-14 13:51:14 +0800424#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100425static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100426 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100427 16,
428 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100429 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100430 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100431 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100432 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100433 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100434};
435
436static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100437 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100438 16,
439 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100440 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100441 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100442 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100443 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100444 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100445};
Yanray Wang7732ced2023-09-14 13:51:14 +0800446#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100447#endif /* MBEDTLS_CIPHER_MODE_OFB */
448
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200449#if defined(MBEDTLS_CIPHER_MODE_CTR)
450static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100451 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100452 16,
453 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100454 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100455 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100456 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200457 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100458 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000459};
460
Yanray Wang7732ced2023-09-14 13:51:14 +0800461#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200462static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100463 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100464 16,
465 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100466 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100467 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100468 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200469 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100470 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000471};
472
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200473static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100474 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100475 16,
476 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100477 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100478 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100479 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200480 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100481 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000482};
Yanray Wang7732ced2023-09-14 13:51:14 +0800483#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200484#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000485
Jaeden Ameroc6539902018-04-30 17:17:41 +0100486#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100487static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
488 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100489{
490 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100491 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100492}
493
Gilles Peskine449bd832023-01-11 14:50:10 +0100494static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
495 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100496{
497 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100498 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100499}
500
Gilles Peskine449bd832023-01-11 14:50:10 +0100501static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100502{
Gilles Peskine449bd832023-01-11 14:50:10 +0100503 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100504
Gilles Peskine449bd832023-01-11 14:50:10 +0100505 if (xts_ctx != NULL) {
506 mbedtls_aes_xts_init(xts_ctx);
507 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100508
Gilles Peskine449bd832023-01-11 14:50:10 +0100509 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100510}
511
Gilles Peskine449bd832023-01-11 14:50:10 +0100512static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100513{
514 mbedtls_aes_xts_context *xts_ctx = ctx;
515
Gilles Peskine449bd832023-01-11 14:50:10 +0100516 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100517 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100518 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100519
Gilles Peskine449bd832023-01-11 14:50:10 +0100520 mbedtls_aes_xts_free(xts_ctx);
521 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100522}
523
524static const mbedtls_cipher_base_t xts_aes_info = {
525 MBEDTLS_CIPHER_ID_AES,
526 NULL,
527#if defined(MBEDTLS_CIPHER_MODE_CBC)
528 NULL,
529#endif
530#if defined(MBEDTLS_CIPHER_MODE_CFB)
531 NULL,
532#endif
533#if defined(MBEDTLS_CIPHER_MODE_OFB)
534 NULL,
535#endif
536#if defined(MBEDTLS_CIPHER_MODE_CTR)
537 NULL,
538#endif
539#if defined(MBEDTLS_CIPHER_MODE_XTS)
540 aes_crypt_xts_wrap,
541#endif
542#if defined(MBEDTLS_CIPHER_MODE_STREAM)
543 NULL,
544#endif
545 xts_aes_setkey_enc_wrap,
546 xts_aes_setkey_dec_wrap,
547 xts_aes_ctx_alloc,
548 xts_aes_ctx_free
549};
550
551static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100552 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100553 16,
554 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100555 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100556 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100557 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100558 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100559 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100560};
561
Yanray Wang7732ced2023-09-14 13:51:14 +0800562#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100563static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100564 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100565 16,
566 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100567 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100568 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100569 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100570 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100571 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100572};
Yanray Wang7732ced2023-09-14 13:51:14 +0800573#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100574#endif /* MBEDTLS_CIPHER_MODE_XTS */
575
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200576#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100577static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
578 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200579{
Gilles Peskine449bd832023-01-11 14:50:10 +0100580 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
581 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200582}
583
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200584static const mbedtls_cipher_base_t gcm_aes_info = {
585 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200586 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200587#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200588 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100589#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200590#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200591 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100592#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100593#if defined(MBEDTLS_CIPHER_MODE_OFB)
594 NULL,
595#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200596#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200597 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100598#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100599#if defined(MBEDTLS_CIPHER_MODE_XTS)
600 NULL,
601#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200602#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200603 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100604#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200605 gcm_aes_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800606#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker43aff2a2013-09-09 00:10:27 +0200607 gcm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800608#endif
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200609 gcm_ctx_alloc,
610 gcm_ctx_free,
611};
612
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200613static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100614 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100615 16,
616 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100617 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100618 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100619 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200620 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100621 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100622};
623
Yanray Wang7732ced2023-09-14 13:51:14 +0800624#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200625static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100626 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100627 16,
628 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100629 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100630 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100631 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200632 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100633 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200634};
635
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200636static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100637 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100638 16,
639 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100640 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100641 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100642 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200643 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100644 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100645};
Yanray Wang7732ced2023-09-14 13:51:14 +0800646#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200647#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100648
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200649#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100650static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
651 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200652{
Gilles Peskine449bd832023-01-11 14:50:10 +0100653 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
654 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200655}
656
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200657static const mbedtls_cipher_base_t ccm_aes_info = {
658 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200659 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200660#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200661 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100662#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200663#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200664 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100665#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100666#if defined(MBEDTLS_CIPHER_MODE_OFB)
667 NULL,
668#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200669#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200670 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100671#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100672#if defined(MBEDTLS_CIPHER_MODE_XTS)
673 NULL,
674#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200675#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200676 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100677#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200678 ccm_aes_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800679#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200680 ccm_aes_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800681#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200682 ccm_ctx_alloc,
683 ccm_ctx_free,
684};
685
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200686static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100687 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100688 16,
689 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100690 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100691 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100692 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200693 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100694 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200695};
696
Yanray Wang7732ced2023-09-14 13:51:14 +0800697#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200698static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100699 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100700 16,
701 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100702 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100703 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100704 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200705 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100706 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200707};
708
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200709static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100710 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100711 16,
712 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100713 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100714 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100715 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200716 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100717 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200718};
Yanray Wang7732ced2023-09-14 13:51:14 +0800719#endif
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200720
721static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100722 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100723 16,
724 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100725 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100726 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100727 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200728 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100729 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200730};
731
Yanray Wang7732ced2023-09-14 13:51:14 +0800732#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200733static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100734 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100735 16,
736 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100737 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100738 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100739 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200740 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100741 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200742};
743
744static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100745 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100746 16,
747 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100748 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100749 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100750 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200751 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100752 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200753};
Yanray Wang7732ced2023-09-14 13:51:14 +0800754#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200755#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200756
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200757#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000758
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200759#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000760
Gilles Peskine449bd832023-01-11 14:50:10 +0100761static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
762 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200763{
Gilles Peskine449bd832023-01-11 14:50:10 +0100764 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
765 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200766}
767
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200768#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100769static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
770 size_t length, unsigned char *iv,
771 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000772{
Gilles Peskine449bd832023-01-11 14:50:10 +0100773 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
774 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000775}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200776#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000777
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200778#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100779static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
780 size_t length, size_t *iv_off, unsigned char *iv,
781 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000782{
Gilles Peskine449bd832023-01-11 14:50:10 +0100783 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
784 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000785}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200786#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000787
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200788#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100789static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
790 unsigned char *nonce_counter, unsigned char *stream_block,
791 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000792{
Gilles Peskine449bd832023-01-11 14:50:10 +0100793 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
794 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000795}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200796#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000797
Yanray Wangb67b4742023-10-31 17:10:32 +0800798#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +0100799static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
800 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000801{
Gilles Peskine449bd832023-01-11 14:50:10 +0100802 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000803}
Yanray Wangdb9b3092023-08-24 15:47:53 +0800804#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +0000805
Gilles Peskine449bd832023-01-11 14:50:10 +0100806static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
807 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000808{
Gilles Peskine449bd832023-01-11 14:50:10 +0100809 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000810}
811
Gilles Peskine449bd832023-01-11 14:50:10 +0100812static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000813{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200814 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100815 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200816
Gilles Peskine449bd832023-01-11 14:50:10 +0100817 if (ctx == NULL) {
818 return NULL;
819 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200820
Gilles Peskine449bd832023-01-11 14:50:10 +0100821 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200822
Gilles Peskine449bd832023-01-11 14:50:10 +0100823 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000824}
825
Gilles Peskine449bd832023-01-11 14:50:10 +0100826static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000827{
Gilles Peskine449bd832023-01-11 14:50:10 +0100828 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
829 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000830}
831
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200832static const mbedtls_cipher_base_t camellia_info = {
833 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200834 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200835#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000836 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100837#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200838#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000839 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100840#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100841#if defined(MBEDTLS_CIPHER_MODE_OFB)
842 NULL,
843#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200844#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000845 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100846#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100847#if defined(MBEDTLS_CIPHER_MODE_XTS)
848 NULL,
849#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200850#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200851 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100852#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000853 camellia_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +0800854#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker343a8702011-06-09 14:27:58 +0000855 camellia_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +0800856#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000857 camellia_ctx_alloc,
858 camellia_ctx_free
859};
860
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200861static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100862 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100863 16,
864 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100865 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100866 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100867 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200868 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100869 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200870};
871
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200872static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100873 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100874 16,
875 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100876 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100877 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100878 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200879 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100880 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200881};
882
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200883static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100884 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100885 16,
886 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100887 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100888 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100889 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200890 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100891 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200892};
893
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200894#if defined(MBEDTLS_CIPHER_MODE_CBC)
895static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100896 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100897 16,
898 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100899 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100900 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100901 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200902 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100903 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000904};
905
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200906static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100907 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100908 16,
909 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100910 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100911 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100912 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200913 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100914 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000915};
916
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200917static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100918 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100919 16,
920 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100921 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100922 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100923 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200924 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100925 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000926};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200927#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000928
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200929#if defined(MBEDTLS_CIPHER_MODE_CFB)
930static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100931 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100932 16,
933 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100934 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100935 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100936 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200937 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100938 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000939};
940
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200941static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100942 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100943 16,
944 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100945 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100946 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100947 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200948 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100949 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000950};
951
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200952static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100953 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100954 16,
955 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100956 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100957 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100958 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200959 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100960 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000961};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200962#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000963
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200964#if defined(MBEDTLS_CIPHER_MODE_CTR)
965static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100966 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100967 16,
968 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100969 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100970 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100971 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200972 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100973 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000974};
975
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200976static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100977 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100978 16,
979 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100980 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100981 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100982 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200983 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100984 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000985};
986
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200987static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100988 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100989 16,
990 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100991 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100992 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100993 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200994 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100995 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000996};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200997#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000998
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200999#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001000static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1001 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001002{
Gilles Peskine449bd832023-01-11 14:50:10 +01001003 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1004 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001005}
1006
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001007static const mbedtls_cipher_base_t gcm_camellia_info = {
1008 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001009 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001010#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001011 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001012#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001013#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001014 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001015#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001016#if defined(MBEDTLS_CIPHER_MODE_OFB)
1017 NULL,
1018#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001019#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001020 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001021#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001022#if defined(MBEDTLS_CIPHER_MODE_XTS)
1023 NULL,
1024#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001025#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001026 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001027#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001028 gcm_camellia_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001029#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001030 gcm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001031#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001032 gcm_ctx_alloc,
1033 gcm_ctx_free,
1034};
1035
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001036static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001037 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001038 16,
1039 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001040 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001041 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001042 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001043 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001044 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001045};
1046
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001047static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001048 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001049 16,
1050 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001051 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001052 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001053 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001054 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001055 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001056};
1057
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001058static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001059 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001060 16,
1061 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001062 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001063 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001064 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001065 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001066 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001067};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001068#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001069
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001070#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001071static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1072 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001073{
Gilles Peskine449bd832023-01-11 14:50:10 +01001074 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1075 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001076}
1077
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001078static const mbedtls_cipher_base_t ccm_camellia_info = {
1079 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001080 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001081#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001082 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001083#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001084#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001085 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001086#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001087#if defined(MBEDTLS_CIPHER_MODE_OFB)
1088 NULL,
1089#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001090#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001091 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001092#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001093#if defined(MBEDTLS_CIPHER_MODE_XTS)
1094 NULL,
1095#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001096#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001097 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001098#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001099 ccm_camellia_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001100#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001101 ccm_camellia_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001102#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001103 ccm_ctx_alloc,
1104 ccm_ctx_free,
1105};
1106
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001107static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001108 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001109 16,
1110 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001111 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001112 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001113 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001114 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001115 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001116};
1117
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001118static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001119 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001120 16,
1121 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001122 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001123 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001124 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001125 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001126 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001127};
1128
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001129static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001130 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001131 16,
1132 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001133 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001134 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001135 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001136 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001137 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001138};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001139
1140static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001141 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001142 16,
1143 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001144 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001145 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001146 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001147 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001148 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001149};
1150
1151static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001152 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001153 16,
1154 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001155 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001156 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001157 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001158 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001159 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001160};
1161
1162static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001163 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001164 16,
1165 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001166 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001167 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001168 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001169 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001170 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001171};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001172#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001173
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001174#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001175
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001176#if defined(MBEDTLS_ARIA_C)
1177
Gilles Peskine449bd832023-01-11 14:50:10 +01001178static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1179 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001180{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001181 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001182 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1183 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001184}
1185
1186#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001187static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1188 size_t length, unsigned char *iv,
1189 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001190{
Gilles Peskine449bd832023-01-11 14:50:10 +01001191 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1192 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001193}
1194#endif /* MBEDTLS_CIPHER_MODE_CBC */
1195
1196#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001197static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1198 size_t length, size_t *iv_off, unsigned char *iv,
1199 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001200{
Gilles Peskine449bd832023-01-11 14:50:10 +01001201 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1202 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001203}
1204#endif /* MBEDTLS_CIPHER_MODE_CFB */
1205
1206#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001207static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1208 unsigned char *nonce_counter, unsigned char *stream_block,
1209 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001210{
Gilles Peskine449bd832023-01-11 14:50:10 +01001211 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1212 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001213}
1214#endif /* MBEDTLS_CIPHER_MODE_CTR */
1215
Yanray Wangb67b4742023-10-31 17:10:32 +08001216#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +01001217static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1218 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001219{
Gilles Peskine449bd832023-01-11 14:50:10 +01001220 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001221}
Yanray Wangdb9b3092023-08-24 15:47:53 +08001222#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001223
Gilles Peskine449bd832023-01-11 14:50:10 +01001224static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1225 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001226{
Gilles Peskine449bd832023-01-11 14:50:10 +01001227 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001228}
1229
Gilles Peskine449bd832023-01-11 14:50:10 +01001230static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001231{
1232 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001233 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001234
Gilles Peskine449bd832023-01-11 14:50:10 +01001235 if (ctx == NULL) {
1236 return NULL;
1237 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001238
Gilles Peskine449bd832023-01-11 14:50:10 +01001239 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001240
Gilles Peskine449bd832023-01-11 14:50:10 +01001241 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001242}
1243
Gilles Peskine449bd832023-01-11 14:50:10 +01001244static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001245{
Gilles Peskine449bd832023-01-11 14:50:10 +01001246 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1247 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001248}
1249
1250static const mbedtls_cipher_base_t aria_info = {
1251 MBEDTLS_CIPHER_ID_ARIA,
1252 aria_crypt_ecb_wrap,
1253#if defined(MBEDTLS_CIPHER_MODE_CBC)
1254 aria_crypt_cbc_wrap,
1255#endif
1256#if defined(MBEDTLS_CIPHER_MODE_CFB)
1257 aria_crypt_cfb128_wrap,
1258#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001259#if defined(MBEDTLS_CIPHER_MODE_OFB)
1260 NULL,
1261#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001262#if defined(MBEDTLS_CIPHER_MODE_CTR)
1263 aria_crypt_ctr_wrap,
1264#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001265#if defined(MBEDTLS_CIPHER_MODE_XTS)
1266 NULL,
1267#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001268#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1269 NULL,
1270#endif
1271 aria_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001272#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001273 aria_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001274#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001275 aria_ctx_alloc,
1276 aria_ctx_free
1277};
1278
1279static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001280 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001281 16,
1282 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001283 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001284 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001285 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001286 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001287 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001288};
1289
1290static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001291 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001292 16,
1293 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001294 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001295 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001296 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001297 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001298 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001299};
1300
1301static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001302 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001303 16,
1304 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001305 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001306 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001307 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001308 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001309 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001310};
1311
1312#if defined(MBEDTLS_CIPHER_MODE_CBC)
1313static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001314 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001315 16,
1316 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001317 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001318 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001319 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001320 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001321 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001322};
1323
1324static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001325 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001326 16,
1327 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001328 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001329 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001330 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001331 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001332 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001333};
1334
1335static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001336 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001337 16,
1338 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001339 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001340 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001341 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001342 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001343 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001344};
1345#endif /* MBEDTLS_CIPHER_MODE_CBC */
1346
1347#if defined(MBEDTLS_CIPHER_MODE_CFB)
1348static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001349 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001350 16,
1351 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001352 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001353 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001354 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001355 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001356 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001357};
1358
1359static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001360 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001361 16,
1362 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001363 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001364 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001365 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001366 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001367 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001368};
1369
1370static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001371 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001372 16,
1373 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001374 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001375 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001376 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001377 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001378 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001379};
1380#endif /* MBEDTLS_CIPHER_MODE_CFB */
1381
1382#if defined(MBEDTLS_CIPHER_MODE_CTR)
1383static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001384 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001385 16,
1386 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001387 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001388 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001389 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001390 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001391 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001392};
1393
1394static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001395 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001396 16,
1397 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001398 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001399 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001400 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001401 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001402 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001403};
1404
1405static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001406 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001407 16,
1408 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001409 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001410 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001411 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001412 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001413 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001414};
1415#endif /* MBEDTLS_CIPHER_MODE_CTR */
1416
1417#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001418static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1419 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001420{
Gilles Peskine449bd832023-01-11 14:50:10 +01001421 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1422 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001423}
1424
1425static const mbedtls_cipher_base_t gcm_aria_info = {
1426 MBEDTLS_CIPHER_ID_ARIA,
1427 NULL,
1428#if defined(MBEDTLS_CIPHER_MODE_CBC)
1429 NULL,
1430#endif
1431#if defined(MBEDTLS_CIPHER_MODE_CFB)
1432 NULL,
1433#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001434#if defined(MBEDTLS_CIPHER_MODE_OFB)
1435 NULL,
1436#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001437#if defined(MBEDTLS_CIPHER_MODE_CTR)
1438 NULL,
1439#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001440#if defined(MBEDTLS_CIPHER_MODE_XTS)
1441 NULL,
1442#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001443#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1444 NULL,
1445#endif
1446 gcm_aria_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001447#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001448 gcm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001449#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001450 gcm_ctx_alloc,
1451 gcm_ctx_free,
1452};
1453
1454static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001455 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001456 16,
1457 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001458 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001459 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001460 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001461 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001462 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001463};
1464
1465static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001466 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001467 16,
1468 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001469 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001470 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001471 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001472 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001473 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001474};
1475
1476static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001477 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001478 16,
1479 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001480 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001481 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001482 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001483 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001484 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001485};
1486#endif /* MBEDTLS_GCM_C */
1487
1488#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001489static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1490 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001491{
Gilles Peskine449bd832023-01-11 14:50:10 +01001492 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1493 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001494}
1495
1496static const mbedtls_cipher_base_t ccm_aria_info = {
1497 MBEDTLS_CIPHER_ID_ARIA,
1498 NULL,
1499#if defined(MBEDTLS_CIPHER_MODE_CBC)
1500 NULL,
1501#endif
1502#if defined(MBEDTLS_CIPHER_MODE_CFB)
1503 NULL,
1504#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001505#if defined(MBEDTLS_CIPHER_MODE_OFB)
1506 NULL,
1507#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001508#if defined(MBEDTLS_CIPHER_MODE_CTR)
1509 NULL,
1510#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001511#if defined(MBEDTLS_CIPHER_MODE_XTS)
1512 NULL,
1513#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001514#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1515 NULL,
1516#endif
1517 ccm_aria_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001518#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001519 ccm_aria_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001520#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001521 ccm_ctx_alloc,
1522 ccm_ctx_free,
1523};
1524
1525static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001526 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001527 16,
1528 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001529 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001530 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001531 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001532 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001533 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001534};
1535
1536static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001537 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001538 16,
1539 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001540 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001541 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001542 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001543 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001544 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001545};
1546
1547static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001548 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001549 16,
1550 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001551 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001552 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001553 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001554 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001555 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001556};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001557
1558static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001559 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001560 16,
1561 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001562 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001563 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001564 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001565 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001566 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001567};
1568
1569static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001570 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001571 16,
1572 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001573 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001574 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001575 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001576 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001577 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001578};
1579
1580static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001581 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001582 16,
1583 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001584 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001585 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001586 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001587 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001588 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001589};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001590#endif /* MBEDTLS_CCM_C */
1591
1592#endif /* MBEDTLS_ARIA_C */
1593
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001594#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001595
Gilles Peskine449bd832023-01-11 14:50:10 +01001596static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1597 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001598{
1599 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001600 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001601}
1602
Gilles Peskine449bd832023-01-11 14:50:10 +01001603static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1604 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001605{
1606 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001607 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001608}
1609
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001610#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001611static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1612 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001613{
Gilles Peskine449bd832023-01-11 14:50:10 +01001614 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1615 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001616}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001617#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001618
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001619#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001620static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1621 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001622{
Gilles Peskine449bd832023-01-11 14:50:10 +01001623 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1624 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001625}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001626#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001627
Yanray Wangb67b4742023-10-31 17:10:32 +08001628#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +01001629static int des_setkey_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_des_setkey_dec((mbedtls_des_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 des_setkey_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_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001644}
1645
Yanray Wangb67b4742023-10-31 17:10:32 +08001646#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +01001647static int des3_set2key_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_set2key_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_set2key_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_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001662}
1663
Yanray Wangb67b4742023-10-31 17:10:32 +08001664#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Gilles Peskine449bd832023-01-11 14:50:10 +01001665static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1666 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001667{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001668 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001669
Gilles Peskine449bd832023-01-11 14:50:10 +01001670 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001671}
Yanray Wangdb9b3092023-08-24 15:47:53 +08001672#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +00001673
Gilles Peskine449bd832023-01-11 14:50:10 +01001674static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1675 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001676{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001677 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001678
Gilles Peskine449bd832023-01-11 14:50:10 +01001679 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001680}
1681
Gilles Peskine449bd832023-01-11 14:50:10 +01001682static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001683{
Gilles Peskine449bd832023-01-11 14:50:10 +01001684 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001685
Gilles Peskine449bd832023-01-11 14:50:10 +01001686 if (des == NULL) {
1687 return NULL;
1688 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001689
Gilles Peskine449bd832023-01-11 14:50:10 +01001690 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001691
Gilles Peskine449bd832023-01-11 14:50:10 +01001692 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001693}
1694
Gilles Peskine449bd832023-01-11 14:50:10 +01001695static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001696{
Gilles Peskine449bd832023-01-11 14:50:10 +01001697 mbedtls_des_free((mbedtls_des_context *) ctx);
1698 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001699}
1700
Gilles Peskine449bd832023-01-11 14:50:10 +01001701static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001702{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001703 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001704 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001705
Gilles Peskine449bd832023-01-11 14:50:10 +01001706 if (des3 == NULL) {
1707 return NULL;
1708 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001709
Gilles Peskine449bd832023-01-11 14:50:10 +01001710 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001711
Gilles Peskine449bd832023-01-11 14:50:10 +01001712 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001713}
1714
Gilles Peskine449bd832023-01-11 14:50:10 +01001715static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001716{
Gilles Peskine449bd832023-01-11 14:50:10 +01001717 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1718 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001719}
1720
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001721static const mbedtls_cipher_base_t des_info = {
1722 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001723 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001724#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001725 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001726#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001727#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001728 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001729#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001730#if defined(MBEDTLS_CIPHER_MODE_OFB)
1731 NULL,
1732#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001733#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001734 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001735#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001736#if defined(MBEDTLS_CIPHER_MODE_XTS)
1737 NULL,
1738#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001739#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001740 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001741#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001742 des_setkey_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001743#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker23986e52011-04-24 08:57:21 +00001744 des_setkey_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001745#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001746 des_ctx_alloc,
1747 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001748};
1749
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001750static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001751 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001752 8,
1753 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001754 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001755 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001756 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001757 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001758 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001759};
1760
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001761#if defined(MBEDTLS_CIPHER_MODE_CBC)
1762static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001763 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001764 8,
1765 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001766 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001767 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001768 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001769 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001770 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001771};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001772#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001773
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001774static const mbedtls_cipher_base_t des_ede_info = {
1775 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001776 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001777#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001778 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001779#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001780#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001781 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001782#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001783#if defined(MBEDTLS_CIPHER_MODE_OFB)
1784 NULL,
1785#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001786#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001787 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001788#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001789#if defined(MBEDTLS_CIPHER_MODE_XTS)
1790 NULL,
1791#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001792#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001793 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001794#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001795 des3_set2key_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001796#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker23986e52011-04-24 08:57:21 +00001797 des3_set2key_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001798#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001799 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001800 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001801};
1802
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001803static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001804 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001805 8,
1806 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001807 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001808 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001809 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001810 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001811 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001812};
1813
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001814#if defined(MBEDTLS_CIPHER_MODE_CBC)
1815static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001816 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001817 8,
1818 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001819 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001820 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001821 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001822 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001823 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001824};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001825#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001826
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001827static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001828 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001829 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001830#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001831 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001832#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001833#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001834 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001835#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001836#if defined(MBEDTLS_CIPHER_MODE_OFB)
1837 NULL,
1838#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001839#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001840 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001841#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001842#if defined(MBEDTLS_CIPHER_MODE_XTS)
1843 NULL,
1844#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001845#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001846 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001847#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001848 des3_set3key_enc_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001849#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Paul Bakker343a8702011-06-09 14:27:58 +00001850 des3_set3key_dec_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001851#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001852 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001853 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001854};
1855
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001856static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001857 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001858 8,
1859 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001860 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001861 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001862 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001863 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001864 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001865};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001866#if defined(MBEDTLS_CIPHER_MODE_CBC)
1867static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001868 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001869 8,
1870 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001871 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001872 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001873 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001874 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001875 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001876};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001877#endif /* MBEDTLS_CIPHER_MODE_CBC */
1878#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001879
Daniel Kingbd920622016-05-15 19:56:20 -03001880#if defined(MBEDTLS_CHACHA20_C)
1881
Gilles Peskine449bd832023-01-11 14:50:10 +01001882static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1883 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001884{
Gilles Peskine449bd832023-01-11 14:50:10 +01001885 if (key_bitlen != 256U) {
1886 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1887 }
Daniel Kingbd920622016-05-15 19:56:20 -03001888
Gilles Peskine449bd832023-01-11 14:50:10 +01001889 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1890 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1891 }
Daniel Kingbd920622016-05-15 19:56:20 -03001892
Gilles Peskine449bd832023-01-11 14:50:10 +01001893 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001894}
1895
Gilles Peskine449bd832023-01-11 14:50:10 +01001896static int chacha20_stream_wrap(void *ctx, size_t length,
1897 const unsigned char *input,
1898 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001899{
Janos Follath24eed8d2019-11-22 13:21:35 +00001900 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001901
Gilles Peskine449bd832023-01-11 14:50:10 +01001902 ret = mbedtls_chacha20_update(ctx, length, input, output);
1903 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1904 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1905 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001906
Gilles Peskine449bd832023-01-11 14:50:10 +01001907 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001908}
1909
Gilles Peskine449bd832023-01-11 14:50:10 +01001910static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001911{
1912 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001913 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001914
Gilles Peskine449bd832023-01-11 14:50:10 +01001915 if (ctx == NULL) {
1916 return NULL;
1917 }
Daniel Kingbd920622016-05-15 19:56:20 -03001918
Gilles Peskine449bd832023-01-11 14:50:10 +01001919 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001920
Gilles Peskine449bd832023-01-11 14:50:10 +01001921 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001922}
1923
Gilles Peskine449bd832023-01-11 14:50:10 +01001924static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001925{
Gilles Peskine449bd832023-01-11 14:50:10 +01001926 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1927 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001928}
1929
1930static const mbedtls_cipher_base_t chacha20_base_info = {
1931 MBEDTLS_CIPHER_ID_CHACHA20,
1932 NULL,
1933#if defined(MBEDTLS_CIPHER_MODE_CBC)
1934 NULL,
1935#endif
1936#if defined(MBEDTLS_CIPHER_MODE_CFB)
1937 NULL,
1938#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001939#if defined(MBEDTLS_CIPHER_MODE_OFB)
1940 NULL,
1941#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001942#if defined(MBEDTLS_CIPHER_MODE_CTR)
1943 NULL,
1944#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001945#if defined(MBEDTLS_CIPHER_MODE_XTS)
1946 NULL,
1947#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001948#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001949 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001950#endif
1951 chacha20_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001952#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Daniel Kingbd920622016-05-15 19:56:20 -03001953 chacha20_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001954#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001955 chacha20_ctx_alloc,
1956 chacha20_ctx_free
1957};
1958static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001959 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001960 1,
1961 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001962 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001963 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001964 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001965 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001966 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001967};
1968#endif /* MBEDTLS_CHACHA20_C */
1969
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001970#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001971
Gilles Peskine449bd832023-01-11 14:50:10 +01001972static int chachapoly_setkey_wrap(void *ctx,
1973 const unsigned char *key,
1974 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001975{
Gilles Peskine449bd832023-01-11 14:50:10 +01001976 if (key_bitlen != 256U) {
1977 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1978 }
Daniel King8fe47012016-05-17 20:33:28 -03001979
Gilles Peskine449bd832023-01-11 14:50:10 +01001980 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1981 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1982 }
Daniel King8fe47012016-05-17 20:33:28 -03001983
Gilles Peskine449bd832023-01-11 14:50:10 +01001984 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001985}
1986
Gilles Peskine449bd832023-01-11 14:50:10 +01001987static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001988{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001989 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001990 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001991
Gilles Peskine449bd832023-01-11 14:50:10 +01001992 if (ctx == NULL) {
1993 return NULL;
1994 }
Daniel King8fe47012016-05-17 20:33:28 -03001995
Gilles Peskine449bd832023-01-11 14:50:10 +01001996 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001997
Gilles Peskine449bd832023-01-11 14:50:10 +01001998 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001999}
2000
Gilles Peskine449bd832023-01-11 14:50:10 +01002001static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03002002{
Gilles Peskine449bd832023-01-11 14:50:10 +01002003 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
2004 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03002005}
2006
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002007static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03002008 MBEDTLS_CIPHER_ID_CHACHA20,
2009 NULL,
2010#if defined(MBEDTLS_CIPHER_MODE_CBC)
2011 NULL,
2012#endif
2013#if defined(MBEDTLS_CIPHER_MODE_CFB)
2014 NULL,
2015#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002016#if defined(MBEDTLS_CIPHER_MODE_OFB)
2017 NULL,
2018#endif
Daniel King8fe47012016-05-17 20:33:28 -03002019#if defined(MBEDTLS_CIPHER_MODE_CTR)
2020 NULL,
2021#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002022#if defined(MBEDTLS_CIPHER_MODE_XTS)
2023 NULL,
2024#endif
Daniel King8fe47012016-05-17 20:33:28 -03002025#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2026 NULL,
2027#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002028 chachapoly_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08002029#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002030 chachapoly_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002031#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002032 chachapoly_ctx_alloc,
2033 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002034};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002035static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002036 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002037 1,
2038 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002039 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002040 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002041 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002042 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002043 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002044};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002045#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002046
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002047#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002048static int null_crypt_stream(void *ctx, size_t length,
2049 const unsigned char *input,
2050 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002051{
2052 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002053 memmove(output, input, length);
2054 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002055}
2056
Gilles Peskine449bd832023-01-11 14:50:10 +01002057static int null_setkey(void *ctx, const unsigned char *key,
2058 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002059{
2060 ((void) ctx);
2061 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002062 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002063
Gilles Peskine449bd832023-01-11 14:50:10 +01002064 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002065}
2066
Gilles Peskine449bd832023-01-11 14:50:10 +01002067static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002068{
Gilles Peskine449bd832023-01-11 14:50:10 +01002069 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002070}
2071
Gilles Peskine449bd832023-01-11 14:50:10 +01002072static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002073{
2074 ((void) ctx);
2075}
2076
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002077static const mbedtls_cipher_base_t null_base_info = {
2078 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002079 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002080#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002081 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002082#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002083#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002084 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002085#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002086#if defined(MBEDTLS_CIPHER_MODE_OFB)
2087 NULL,
2088#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002089#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002090 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002091#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002092#if defined(MBEDTLS_CIPHER_MODE_XTS)
2093 NULL,
2094#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002095#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002096 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002097#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002098 null_setkey,
Yanray Wangb67b4742023-10-31 17:10:32 +08002099#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002100 null_setkey,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002101#endif
Paul Bakkerfab5c822012-02-06 16:45:10 +00002102 null_ctx_alloc,
2103 null_ctx_free
2104};
2105
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002106static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002107 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002108 1,
2109 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002110 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002111 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002112 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002113 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002114 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002115};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002116#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002117
Jack Lloydffdf2882019-03-07 17:00:32 -05002118#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002119static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002120{
Gilles Peskine449bd832023-01-11 14:50:10 +01002121 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002122
Gilles Peskine449bd832023-01-11 14:50:10 +01002123 if (ctx != NULL) {
2124 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2125 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002126
Gilles Peskine449bd832023-01-11 14:50:10 +01002127 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002128}
2129
Gilles Peskine449bd832023-01-11 14:50:10 +01002130static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002131{
Gilles Peskine449bd832023-01-11 14:50:10 +01002132 mbedtls_nist_kw_free(ctx);
2133 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002134}
2135
Gilles Peskine449bd832023-01-11 14:50:10 +01002136static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2137 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002138{
Gilles Peskine449bd832023-01-11 14:50:10 +01002139 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2140 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002141}
2142
Gilles Peskine449bd832023-01-11 14:50:10 +01002143static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2144 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002145{
Gilles Peskine449bd832023-01-11 14:50:10 +01002146 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2147 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002148}
2149
2150static const mbedtls_cipher_base_t kw_aes_info = {
2151 MBEDTLS_CIPHER_ID_AES,
2152 NULL,
2153#if defined(MBEDTLS_CIPHER_MODE_CBC)
2154 NULL,
2155#endif
2156#if defined(MBEDTLS_CIPHER_MODE_CFB)
2157 NULL,
2158#endif
2159#if defined(MBEDTLS_CIPHER_MODE_OFB)
2160 NULL,
2161#endif
2162#if defined(MBEDTLS_CIPHER_MODE_CTR)
2163 NULL,
2164#endif
2165#if defined(MBEDTLS_CIPHER_MODE_XTS)
2166 NULL,
2167#endif
2168#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2169 NULL,
2170#endif
2171 kw_aes_setkey_wrap,
2172 kw_aes_setkey_unwrap,
2173 kw_ctx_alloc,
2174 kw_ctx_free,
2175};
2176
2177static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002178 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002179 16,
2180 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002181 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002182 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002183 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002184 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002185 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002186};
2187
Yanray Wang7732ced2023-09-14 13:51:14 +08002188#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002189static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002190 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002191 16,
2192 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002193 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002194 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002195 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002196 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002197 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002198};
2199
2200static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002201 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002202 16,
2203 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002204 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002205 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002206 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002207 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002208 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002209};
Yanray Wang7732ced2023-09-14 13:51:14 +08002210#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002211
2212static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002213 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002214 16,
2215 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002216 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002217 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002218 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002219 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002220 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002221};
2222
Yanray Wang7732ced2023-09-14 13:51:14 +08002223#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002224static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002225 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002226 16,
2227 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002228 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002229 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002230 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002231 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002232 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002233};
2234
2235static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002236 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002237 16,
2238 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002239 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002240 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002241 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002242 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002243 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002244};
Yanray Wang7732ced2023-09-14 13:51:14 +08002245#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002246#endif /* MBEDTLS_NIST_KW_C */
2247
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002248const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002249{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002250#if defined(MBEDTLS_AES_C)
2251 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002252#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002253 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2254 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002255#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002256#if defined(MBEDTLS_CIPHER_MODE_CBC)
2257 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002258#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002259 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2260 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002261#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002262#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002263#if defined(MBEDTLS_CIPHER_MODE_CFB)
2264 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002265#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002266 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2267 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002268#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002269#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002270#if defined(MBEDTLS_CIPHER_MODE_OFB)
2271 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002272#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002273 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2274 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2275#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002276#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002277#if defined(MBEDTLS_CIPHER_MODE_CTR)
2278 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002279#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002280 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2281 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002282#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002283#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002284#if defined(MBEDTLS_CIPHER_MODE_XTS)
2285 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002286#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002287 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2288#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002289#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002290#if defined(MBEDTLS_GCM_C)
2291 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002292#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002293 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2294 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002295#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002296#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002297#if defined(MBEDTLS_CCM_C)
2298 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002299#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002300 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2301 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002302#endif
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002303 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002304#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002305 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2306 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002307#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002308#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002309#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002310
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002311#if defined(MBEDTLS_CAMELLIA_C)
2312 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2313 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2314 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2315#if defined(MBEDTLS_CIPHER_MODE_CBC)
2316 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2317 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2318 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002319#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002320#if defined(MBEDTLS_CIPHER_MODE_CFB)
2321 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2322 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2323 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002324#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002325#if defined(MBEDTLS_CIPHER_MODE_CTR)
2326 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2327 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2328 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002329#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002330#if defined(MBEDTLS_GCM_C)
2331 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2332 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2333 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002334#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002335#if defined(MBEDTLS_CCM_C)
2336 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2337 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2338 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002339 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2340 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2341 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002342#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002343#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002344
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002345#if defined(MBEDTLS_ARIA_C)
2346 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2347 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2348 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2349#if defined(MBEDTLS_CIPHER_MODE_CBC)
2350 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2351 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2352 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2353#endif
2354#if defined(MBEDTLS_CIPHER_MODE_CFB)
2355 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2356 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2357 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2358#endif
2359#if defined(MBEDTLS_CIPHER_MODE_CTR)
2360 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2361 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2362 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2363#endif
2364#if defined(MBEDTLS_GCM_C)
2365 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2366 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2367 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2368#endif
2369#if defined(MBEDTLS_CCM_C)
2370 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2371 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2372 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002373 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2374 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2375 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002376#endif
2377#endif /* MBEDTLS_ARIA_C */
2378
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002379#if defined(MBEDTLS_DES_C)
2380 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2381 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2382 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2383#if defined(MBEDTLS_CIPHER_MODE_CBC)
2384 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2385 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2386 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002387#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002388#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002389
Daniel Kingbd920622016-05-15 19:56:20 -03002390#if defined(MBEDTLS_CHACHA20_C)
2391 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2392#endif
2393
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002394#if defined(MBEDTLS_CHACHAPOLY_C)
2395 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002396#endif
2397
Jack Lloydffdf2882019-03-07 17:00:32 -05002398#if defined(MBEDTLS_NIST_KW_C)
2399 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002400#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002401 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2402 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002403#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002404 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002405#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002406 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2407 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2408#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002409#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002410
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002411#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2412 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2413#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002414
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002415 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002416};
2417
Gilles Peskine449bd832023-01-11 14:50:10 +01002418#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2419 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002420int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002421
Dave Rodgman3b46b772023-06-24 13:25:06 +01002422const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002423#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002424 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002425#endif
2426#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002427 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002428#endif
2429#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002430 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002431#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002432#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002433 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002434#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002435#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002436 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002437#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002438#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002439 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002440#endif
2441#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002442 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002443#endif
2444#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002445 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002446#endif
2447#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002448 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002449#endif
2450#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002451 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002452#endif
2453#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002454 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002455#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002456#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002457 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002458#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002459#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002460 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002461#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002462#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002463 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002464#endif
2465#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002466 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002467#endif
2468#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002469 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002470#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002471#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002472 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002473#endif
2474};
2475
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002476#endif /* MBEDTLS_CIPHER_C */