blob: a21e3702370d08a7b6dce2fe95c2e764db9de368 [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
Gilles Peskine449bd832023-01-11 14:50:10 +01001628static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1629 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001630{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001631 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001632
Gilles Peskine449bd832023-01-11 14:50:10 +01001633 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001634}
1635
Gilles Peskine449bd832023-01-11 14:50:10 +01001636static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1637 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001638{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001639 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001640
Gilles Peskine449bd832023-01-11 14:50:10 +01001641 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001642}
1643
Gilles Peskine449bd832023-01-11 14:50:10 +01001644static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1645 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001646{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001647 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001648
Gilles Peskine449bd832023-01-11 14:50:10 +01001649 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001650}
1651
Gilles Peskine449bd832023-01-11 14:50:10 +01001652static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1653 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001654{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001655 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001656
Gilles Peskine449bd832023-01-11 14:50:10 +01001657 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001658}
1659
Gilles Peskine449bd832023-01-11 14:50:10 +01001660static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1661 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001662{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001663 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001664
Gilles Peskine449bd832023-01-11 14:50:10 +01001665 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001666}
1667
Gilles Peskine449bd832023-01-11 14:50:10 +01001668static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1669 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001670{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001671 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001672
Gilles Peskine449bd832023-01-11 14:50:10 +01001673 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001674}
1675
Gilles Peskine449bd832023-01-11 14:50:10 +01001676static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001677{
Gilles Peskine449bd832023-01-11 14:50:10 +01001678 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001679
Gilles Peskine449bd832023-01-11 14:50:10 +01001680 if (des == NULL) {
1681 return NULL;
1682 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001683
Gilles Peskine449bd832023-01-11 14:50:10 +01001684 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001685
Gilles Peskine449bd832023-01-11 14:50:10 +01001686 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001687}
1688
Gilles Peskine449bd832023-01-11 14:50:10 +01001689static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001690{
Gilles Peskine449bd832023-01-11 14:50:10 +01001691 mbedtls_des_free((mbedtls_des_context *) ctx);
1692 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001693}
1694
Gilles Peskine449bd832023-01-11 14:50:10 +01001695static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001696{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001697 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001698 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001699
Gilles Peskine449bd832023-01-11 14:50:10 +01001700 if (des3 == NULL) {
1701 return NULL;
1702 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001703
Gilles Peskine449bd832023-01-11 14:50:10 +01001704 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001705
Gilles Peskine449bd832023-01-11 14:50:10 +01001706 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001707}
1708
Gilles Peskine449bd832023-01-11 14:50:10 +01001709static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001710{
Gilles Peskine449bd832023-01-11 14:50:10 +01001711 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1712 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001713}
1714
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001715static const mbedtls_cipher_base_t des_info = {
1716 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001717 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001718#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001719 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001720#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001721#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001722 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001723#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001724#if defined(MBEDTLS_CIPHER_MODE_OFB)
1725 NULL,
1726#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001727#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001728 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001729#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001730#if defined(MBEDTLS_CIPHER_MODE_XTS)
1731 NULL,
1732#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001733#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001734 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001735#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001736 des_setkey_enc_wrap,
1737 des_setkey_dec_wrap,
1738 des_ctx_alloc,
1739 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001740};
1741
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001742static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001743 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001744 8,
1745 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001746 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001747 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001748 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001749 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001750 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001751};
1752
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001753#if defined(MBEDTLS_CIPHER_MODE_CBC)
1754static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001755 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001756 8,
1757 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001758 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001759 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001760 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001761 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001762 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001763};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001764#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001765
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001766static const mbedtls_cipher_base_t des_ede_info = {
1767 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001768 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001769#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001770 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001771#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001772#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001773 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001774#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001775#if defined(MBEDTLS_CIPHER_MODE_OFB)
1776 NULL,
1777#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001778#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001779 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001780#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001781#if defined(MBEDTLS_CIPHER_MODE_XTS)
1782 NULL,
1783#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001784#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001785 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001786#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001787 des3_set2key_enc_wrap,
1788 des3_set2key_dec_wrap,
1789 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001790 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001791};
1792
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001793static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001794 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001795 8,
1796 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001797 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001798 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001799 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001800 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001801 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001802};
1803
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001804#if defined(MBEDTLS_CIPHER_MODE_CBC)
1805static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001806 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001807 8,
1808 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001809 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001810 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001811 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001812 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001813 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001814};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001815#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001816
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001817static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001818 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001819 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001820#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001821 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001822#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001823#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001824 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001825#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001826#if defined(MBEDTLS_CIPHER_MODE_OFB)
1827 NULL,
1828#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001829#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001830 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001831#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001832#if defined(MBEDTLS_CIPHER_MODE_XTS)
1833 NULL,
1834#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001835#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001836 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001837#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001838 des3_set3key_enc_wrap,
1839 des3_set3key_dec_wrap,
1840 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001841 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001842};
1843
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001844static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001845 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001846 8,
1847 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001848 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001849 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001850 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001851 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001852 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001853};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001854#if defined(MBEDTLS_CIPHER_MODE_CBC)
1855static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001856 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001857 8,
1858 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001859 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001860 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001861 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001862 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001863 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001864};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001865#endif /* MBEDTLS_CIPHER_MODE_CBC */
1866#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001867
Daniel Kingbd920622016-05-15 19:56:20 -03001868#if defined(MBEDTLS_CHACHA20_C)
1869
Gilles Peskine449bd832023-01-11 14:50:10 +01001870static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1871 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001872{
Gilles Peskine449bd832023-01-11 14:50:10 +01001873 if (key_bitlen != 256U) {
1874 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1875 }
Daniel Kingbd920622016-05-15 19:56:20 -03001876
Gilles Peskine449bd832023-01-11 14:50:10 +01001877 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1878 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1879 }
Daniel Kingbd920622016-05-15 19:56:20 -03001880
Gilles Peskine449bd832023-01-11 14:50:10 +01001881 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001882}
1883
Gilles Peskine449bd832023-01-11 14:50:10 +01001884static int chacha20_stream_wrap(void *ctx, size_t length,
1885 const unsigned char *input,
1886 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001887{
Janos Follath24eed8d2019-11-22 13:21:35 +00001888 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001889
Gilles Peskine449bd832023-01-11 14:50:10 +01001890 ret = mbedtls_chacha20_update(ctx, length, input, output);
1891 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1892 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1893 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001894
Gilles Peskine449bd832023-01-11 14:50:10 +01001895 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001896}
1897
Gilles Peskine449bd832023-01-11 14:50:10 +01001898static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001899{
1900 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001901 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001902
Gilles Peskine449bd832023-01-11 14:50:10 +01001903 if (ctx == NULL) {
1904 return NULL;
1905 }
Daniel Kingbd920622016-05-15 19:56:20 -03001906
Gilles Peskine449bd832023-01-11 14:50:10 +01001907 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001908
Gilles Peskine449bd832023-01-11 14:50:10 +01001909 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001910}
1911
Gilles Peskine449bd832023-01-11 14:50:10 +01001912static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001913{
Gilles Peskine449bd832023-01-11 14:50:10 +01001914 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1915 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001916}
1917
1918static const mbedtls_cipher_base_t chacha20_base_info = {
1919 MBEDTLS_CIPHER_ID_CHACHA20,
1920 NULL,
1921#if defined(MBEDTLS_CIPHER_MODE_CBC)
1922 NULL,
1923#endif
1924#if defined(MBEDTLS_CIPHER_MODE_CFB)
1925 NULL,
1926#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001927#if defined(MBEDTLS_CIPHER_MODE_OFB)
1928 NULL,
1929#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001930#if defined(MBEDTLS_CIPHER_MODE_CTR)
1931 NULL,
1932#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001933#if defined(MBEDTLS_CIPHER_MODE_XTS)
1934 NULL,
1935#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001936#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001937 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001938#endif
1939 chacha20_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08001940#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Daniel Kingbd920622016-05-15 19:56:20 -03001941 chacha20_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08001942#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001943 chacha20_ctx_alloc,
1944 chacha20_ctx_free
1945};
1946static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001947 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001948 1,
1949 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001950 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001951 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001952 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001953 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001954 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001955};
1956#endif /* MBEDTLS_CHACHA20_C */
1957
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001958#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001959
Gilles Peskine449bd832023-01-11 14:50:10 +01001960static int chachapoly_setkey_wrap(void *ctx,
1961 const unsigned char *key,
1962 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001963{
Gilles Peskine449bd832023-01-11 14:50:10 +01001964 if (key_bitlen != 256U) {
1965 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1966 }
Daniel King8fe47012016-05-17 20:33:28 -03001967
Gilles Peskine449bd832023-01-11 14:50:10 +01001968 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1969 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1970 }
Daniel King8fe47012016-05-17 20:33:28 -03001971
Gilles Peskine449bd832023-01-11 14:50:10 +01001972 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001973}
1974
Gilles Peskine449bd832023-01-11 14:50:10 +01001975static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001976{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001977 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001978 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001979
Gilles Peskine449bd832023-01-11 14:50:10 +01001980 if (ctx == NULL) {
1981 return NULL;
1982 }
Daniel King8fe47012016-05-17 20:33:28 -03001983
Gilles Peskine449bd832023-01-11 14:50:10 +01001984 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001985
Gilles Peskine449bd832023-01-11 14:50:10 +01001986 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001987}
1988
Gilles Peskine449bd832023-01-11 14:50:10 +01001989static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001990{
Gilles Peskine449bd832023-01-11 14:50:10 +01001991 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1992 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001993}
1994
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001995static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001996 MBEDTLS_CIPHER_ID_CHACHA20,
1997 NULL,
1998#if defined(MBEDTLS_CIPHER_MODE_CBC)
1999 NULL,
2000#endif
2001#if defined(MBEDTLS_CIPHER_MODE_CFB)
2002 NULL,
2003#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002004#if defined(MBEDTLS_CIPHER_MODE_OFB)
2005 NULL,
2006#endif
Daniel King8fe47012016-05-17 20:33:28 -03002007#if defined(MBEDTLS_CIPHER_MODE_CTR)
2008 NULL,
2009#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002010#if defined(MBEDTLS_CIPHER_MODE_XTS)
2011 NULL,
2012#endif
Daniel King8fe47012016-05-17 20:33:28 -03002013#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2014 NULL,
2015#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002016 chachapoly_setkey_wrap,
Yanray Wangb67b4742023-10-31 17:10:32 +08002017#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002018 chachapoly_setkey_wrap,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002019#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002020 chachapoly_ctx_alloc,
2021 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002022};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002023static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002024 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002025 1,
2026 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002027 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002028 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002029 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03002030 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002031 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03002032};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002033#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002034
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002035#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01002036static int null_crypt_stream(void *ctx, size_t length,
2037 const unsigned char *input,
2038 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002039{
2040 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002041 memmove(output, input, length);
2042 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002043}
2044
Gilles Peskine449bd832023-01-11 14:50:10 +01002045static int null_setkey(void *ctx, const unsigned char *key,
2046 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002047{
2048 ((void) ctx);
2049 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002050 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002051
Gilles Peskine449bd832023-01-11 14:50:10 +01002052 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002053}
2054
Gilles Peskine449bd832023-01-11 14:50:10 +01002055static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002056{
Gilles Peskine449bd832023-01-11 14:50:10 +01002057 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002058}
2059
Gilles Peskine449bd832023-01-11 14:50:10 +01002060static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002061{
2062 ((void) ctx);
2063}
2064
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002065static const mbedtls_cipher_base_t null_base_info = {
2066 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002067 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002068#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002069 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002070#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002071#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002072 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002073#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002074#if defined(MBEDTLS_CIPHER_MODE_OFB)
2075 NULL,
2076#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002077#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002078 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002079#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002080#if defined(MBEDTLS_CIPHER_MODE_XTS)
2081 NULL,
2082#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002083#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002084 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002085#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002086 null_setkey,
Yanray Wangb67b4742023-10-31 17:10:32 +08002087#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002088 null_setkey,
Yanray Wangdb9b3092023-08-24 15:47:53 +08002089#endif
Paul Bakkerfab5c822012-02-06 16:45:10 +00002090 null_ctx_alloc,
2091 null_ctx_free
2092};
2093
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002094static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002095 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002096 1,
2097 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002098 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002099 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002100 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002101 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002102 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002103};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002104#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002105
Jack Lloydffdf2882019-03-07 17:00:32 -05002106#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002107static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002108{
Gilles Peskine449bd832023-01-11 14:50:10 +01002109 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002110
Gilles Peskine449bd832023-01-11 14:50:10 +01002111 if (ctx != NULL) {
2112 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2113 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002114
Gilles Peskine449bd832023-01-11 14:50:10 +01002115 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002116}
2117
Gilles Peskine449bd832023-01-11 14:50:10 +01002118static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002119{
Gilles Peskine449bd832023-01-11 14:50:10 +01002120 mbedtls_nist_kw_free(ctx);
2121 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002122}
2123
Gilles Peskine449bd832023-01-11 14:50:10 +01002124static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2125 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002126{
Gilles Peskine449bd832023-01-11 14:50:10 +01002127 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2128 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002129}
2130
Gilles Peskine449bd832023-01-11 14:50:10 +01002131static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2132 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002133{
Gilles Peskine449bd832023-01-11 14:50:10 +01002134 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2135 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002136}
2137
2138static const mbedtls_cipher_base_t kw_aes_info = {
2139 MBEDTLS_CIPHER_ID_AES,
2140 NULL,
2141#if defined(MBEDTLS_CIPHER_MODE_CBC)
2142 NULL,
2143#endif
2144#if defined(MBEDTLS_CIPHER_MODE_CFB)
2145 NULL,
2146#endif
2147#if defined(MBEDTLS_CIPHER_MODE_OFB)
2148 NULL,
2149#endif
2150#if defined(MBEDTLS_CIPHER_MODE_CTR)
2151 NULL,
2152#endif
2153#if defined(MBEDTLS_CIPHER_MODE_XTS)
2154 NULL,
2155#endif
2156#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2157 NULL,
2158#endif
2159 kw_aes_setkey_wrap,
2160 kw_aes_setkey_unwrap,
2161 kw_ctx_alloc,
2162 kw_ctx_free,
2163};
2164
2165static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002166 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002167 16,
2168 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002169 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002170 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002171 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002172 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002173 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002174};
2175
Yanray Wang7732ced2023-09-14 13:51:14 +08002176#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002177static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002178 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002179 16,
2180 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002181 192 >> 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_192_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
2188static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002189 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002190 16,
2191 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002192 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002193 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002194 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002195 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002196 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002197};
Yanray Wang7732ced2023-09-14 13:51:14 +08002198#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002199
2200static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002201 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002202 16,
2203 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002204 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002205 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002206 MBEDTLS_CIPHER_AES_128_KWP,
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};
2210
Yanray Wang7732ced2023-09-14 13:51:14 +08002211#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002212static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002213 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002214 16,
2215 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002216 192 >> 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_192_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
2223static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002224 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002225 16,
2226 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002227 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002228 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002229 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002230 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002231 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002232};
Yanray Wang7732ced2023-09-14 13:51:14 +08002233#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002234#endif /* MBEDTLS_NIST_KW_C */
2235
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002236const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002237{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002238#if defined(MBEDTLS_AES_C)
2239 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002240#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002241 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2242 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002243#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002244#if defined(MBEDTLS_CIPHER_MODE_CBC)
2245 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002246#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002247 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2248 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002249#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002250#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002251#if defined(MBEDTLS_CIPHER_MODE_CFB)
2252 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002253#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002254 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2255 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002256#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002257#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002258#if defined(MBEDTLS_CIPHER_MODE_OFB)
2259 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002260#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002261 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2262 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2263#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002264#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002265#if defined(MBEDTLS_CIPHER_MODE_CTR)
2266 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002267#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002268 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2269 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002270#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002271#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002272#if defined(MBEDTLS_CIPHER_MODE_XTS)
2273 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002274#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002275 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2276#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002277#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002278#if defined(MBEDTLS_GCM_C)
2279 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002280#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002281 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2282 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002283#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002284#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002285#if defined(MBEDTLS_CCM_C)
2286 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002287#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002288 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2289 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002290#endif
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002291 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002292#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002293 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2294 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002295#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002296#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002297#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002298
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002299#if defined(MBEDTLS_CAMELLIA_C)
2300 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2301 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2302 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2303#if defined(MBEDTLS_CIPHER_MODE_CBC)
2304 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2305 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2306 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002307#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002308#if defined(MBEDTLS_CIPHER_MODE_CFB)
2309 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2310 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2311 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002312#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002313#if defined(MBEDTLS_CIPHER_MODE_CTR)
2314 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2315 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2316 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002317#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002318#if defined(MBEDTLS_GCM_C)
2319 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2320 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2321 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002322#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002323#if defined(MBEDTLS_CCM_C)
2324 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2325 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2326 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002327 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2328 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2329 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002330#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002331#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002332
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002333#if defined(MBEDTLS_ARIA_C)
2334 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2335 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2336 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2337#if defined(MBEDTLS_CIPHER_MODE_CBC)
2338 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2339 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2340 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2341#endif
2342#if defined(MBEDTLS_CIPHER_MODE_CFB)
2343 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2344 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2345 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2346#endif
2347#if defined(MBEDTLS_CIPHER_MODE_CTR)
2348 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2349 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2350 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2351#endif
2352#if defined(MBEDTLS_GCM_C)
2353 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2354 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2355 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2356#endif
2357#if defined(MBEDTLS_CCM_C)
2358 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2359 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2360 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002361 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2362 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2363 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002364#endif
2365#endif /* MBEDTLS_ARIA_C */
2366
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002367#if defined(MBEDTLS_DES_C)
2368 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2369 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2370 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2371#if defined(MBEDTLS_CIPHER_MODE_CBC)
2372 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2373 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2374 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002375#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002376#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002377
Daniel Kingbd920622016-05-15 19:56:20 -03002378#if defined(MBEDTLS_CHACHA20_C)
2379 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2380#endif
2381
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002382#if defined(MBEDTLS_CHACHAPOLY_C)
2383 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002384#endif
2385
Jack Lloydffdf2882019-03-07 17:00:32 -05002386#if defined(MBEDTLS_NIST_KW_C)
2387 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002388#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002389 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2390 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002391#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002392 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002393#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002394 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2395 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2396#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002397#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002398
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002399#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2400 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2401#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002402
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002403 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002404};
2405
Gilles Peskine449bd832023-01-11 14:50:10 +01002406#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2407 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002408int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002409
Dave Rodgman3b46b772023-06-24 13:25:06 +01002410const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002411#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002412 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002413#endif
2414#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002415 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002416#endif
2417#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002418 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002419#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002420#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002421 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002422#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002423#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002424 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002425#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002426#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002427 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002428#endif
2429#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002430 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002431#endif
2432#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002433 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002434#endif
2435#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002436 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002437#endif
2438#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002439 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002440#endif
2441#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002442 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002443#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002444#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002445 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002446#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002447#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002448 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002449#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002450#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002451 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002452#endif
2453#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002454 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002455#endif
2456#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002457 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002458#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002459#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002460 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002461#endif
2462};
2463
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002464#endif /* MBEDTLS_CIPHER_C */