blob: 8e061218cb18aaa78280dbc186b74bf78b52a6d3 [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
Gilles Peskine449bd832023-01-11 14:50:10 +0100241static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
242 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000243{
Gilles Peskine449bd832023-01-11 14:50:10 +0100244 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000245}
246
Gilles Peskine449bd832023-01-11 14:50:10 +0100247static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
248 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000249{
Gilles Peskine449bd832023-01-11 14:50:10 +0100250 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000251}
252
Gilles Peskine449bd832023-01-11 14:50:10 +0100253static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000254{
Gilles Peskine449bd832023-01-11 14:50:10 +0100255 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200256
Gilles Peskine449bd832023-01-11 14:50:10 +0100257 if (aes == NULL) {
258 return NULL;
259 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200260
Gilles Peskine449bd832023-01-11 14:50:10 +0100261 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200262
Gilles Peskine449bd832023-01-11 14:50:10 +0100263 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000264}
265
Gilles Peskine449bd832023-01-11 14:50:10 +0100266static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000267{
Gilles Peskine449bd832023-01-11 14:50:10 +0100268 mbedtls_aes_free((mbedtls_aes_context *) ctx);
269 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000270}
271
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200272static const mbedtls_cipher_base_t aes_info = {
273 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200274 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200275#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000276 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100277#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200278#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000279 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100280#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100281#if defined(MBEDTLS_CIPHER_MODE_OFB)
282 aes_crypt_ofb_wrap,
283#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200284#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000285 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100286#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100287#if defined(MBEDTLS_CIPHER_MODE_XTS)
288 NULL,
289#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200290#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200291 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100292#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000293 aes_setkey_enc_wrap,
294 aes_setkey_dec_wrap,
295 aes_ctx_alloc,
296 aes_ctx_free
297};
298
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200299static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100300 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100301 16,
302 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100303 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100304 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100305 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200306 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100307 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200308};
309
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200310static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100311 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100312 16,
313 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100314 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100315 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100316 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200317 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100318 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200319};
320
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200321static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100322 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100323 16,
324 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100325 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100326 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100327 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200328 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100329 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200330};
331
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200332#if defined(MBEDTLS_CIPHER_MODE_CBC)
333static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100334 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100335 16,
336 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100337 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100338 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100339 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200340 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100341 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000342};
343
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200344static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100345 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100346 16,
347 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100348 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100349 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100350 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200351 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100352 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000353};
354
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200355static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100356 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100357 16,
358 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100359 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100360 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100361 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200362 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100363 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000364};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200365#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000366
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200367#if defined(MBEDTLS_CIPHER_MODE_CFB)
368static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100369 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100370 16,
371 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100372 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100373 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100374 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200375 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100376 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000377};
378
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200379static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100380 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100381 16,
382 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100383 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100384 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100385 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200386 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100387 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000388};
389
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200390static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100391 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100392 16,
393 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100394 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100395 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100396 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200397 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100398 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000399};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200400#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000401
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100402#if defined(MBEDTLS_CIPHER_MODE_OFB)
403static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100404 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100405 16,
406 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100407 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100408 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100409 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100410 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100411 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100412};
413
414static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100415 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100416 16,
417 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100418 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100419 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100420 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100421 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100422 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100423};
424
425static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100426 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100427 16,
428 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100429 256 >> 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_256_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#endif /* MBEDTLS_CIPHER_MODE_OFB */
436
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200437#if defined(MBEDTLS_CIPHER_MODE_CTR)
438static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100439 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100440 16,
441 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100442 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100443 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100444 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200445 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100446 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000447};
448
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200449static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100450 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100451 16,
452 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100453 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100454 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100455 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200456 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100457 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000458};
459
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200460static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100461 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100462 16,
463 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100464 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100465 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100466 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200467 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100468 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000469};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200470#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000471
Jaeden Ameroc6539902018-04-30 17:17:41 +0100472#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100473static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
474 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100475{
476 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100477 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100478}
479
Gilles Peskine449bd832023-01-11 14:50:10 +0100480static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
481 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100482{
483 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100484 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100485}
486
Gilles Peskine449bd832023-01-11 14:50:10 +0100487static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100488{
Gilles Peskine449bd832023-01-11 14:50:10 +0100489 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100490
Gilles Peskine449bd832023-01-11 14:50:10 +0100491 if (xts_ctx != NULL) {
492 mbedtls_aes_xts_init(xts_ctx);
493 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100494
Gilles Peskine449bd832023-01-11 14:50:10 +0100495 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100496}
497
Gilles Peskine449bd832023-01-11 14:50:10 +0100498static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100499{
500 mbedtls_aes_xts_context *xts_ctx = ctx;
501
Gilles Peskine449bd832023-01-11 14:50:10 +0100502 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100503 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100504 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100505
Gilles Peskine449bd832023-01-11 14:50:10 +0100506 mbedtls_aes_xts_free(xts_ctx);
507 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100508}
509
510static const mbedtls_cipher_base_t xts_aes_info = {
511 MBEDTLS_CIPHER_ID_AES,
512 NULL,
513#if defined(MBEDTLS_CIPHER_MODE_CBC)
514 NULL,
515#endif
516#if defined(MBEDTLS_CIPHER_MODE_CFB)
517 NULL,
518#endif
519#if defined(MBEDTLS_CIPHER_MODE_OFB)
520 NULL,
521#endif
522#if defined(MBEDTLS_CIPHER_MODE_CTR)
523 NULL,
524#endif
525#if defined(MBEDTLS_CIPHER_MODE_XTS)
526 aes_crypt_xts_wrap,
527#endif
528#if defined(MBEDTLS_CIPHER_MODE_STREAM)
529 NULL,
530#endif
531 xts_aes_setkey_enc_wrap,
532 xts_aes_setkey_dec_wrap,
533 xts_aes_ctx_alloc,
534 xts_aes_ctx_free
535};
536
537static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100538 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100539 16,
540 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100541 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100542 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100543 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100544 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100545 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100546};
547
548static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100549 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100550 16,
551 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100552 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100553 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100554 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100555 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100556 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100557};
558#endif /* MBEDTLS_CIPHER_MODE_XTS */
559
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200560#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100561static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
562 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200563{
Gilles Peskine449bd832023-01-11 14:50:10 +0100564 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
565 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200566}
567
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200568static const mbedtls_cipher_base_t gcm_aes_info = {
569 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200570 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200571#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200572 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100573#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200574#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200575 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100576#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100577#if defined(MBEDTLS_CIPHER_MODE_OFB)
578 NULL,
579#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200580#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200581 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100582#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100583#if defined(MBEDTLS_CIPHER_MODE_XTS)
584 NULL,
585#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200586#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200587 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100588#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200589 gcm_aes_setkey_wrap,
590 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200591 gcm_ctx_alloc,
592 gcm_ctx_free,
593};
594
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200595static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100596 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100597 16,
598 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100599 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100600 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100601 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200602 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100603 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100604};
605
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200606static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100607 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100608 16,
609 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100610 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100611 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100612 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200613 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100614 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200615};
616
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200617static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100618 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100619 16,
620 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100621 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100622 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100623 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200624 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100625 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100626};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200627#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100628
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200629#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100630static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
631 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200632{
Gilles Peskine449bd832023-01-11 14:50:10 +0100633 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
634 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200635}
636
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200637static const mbedtls_cipher_base_t ccm_aes_info = {
638 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200639 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200640#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200641 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100642#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200643#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200644 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100645#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100646#if defined(MBEDTLS_CIPHER_MODE_OFB)
647 NULL,
648#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200649#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200650 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100651#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100652#if defined(MBEDTLS_CIPHER_MODE_XTS)
653 NULL,
654#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200655#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200656 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100657#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200658 ccm_aes_setkey_wrap,
659 ccm_aes_setkey_wrap,
660 ccm_ctx_alloc,
661 ccm_ctx_free,
662};
663
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200664static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100665 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100666 16,
667 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100668 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100669 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100670 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200671 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100672 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200673};
674
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200675static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100676 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100677 16,
678 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100679 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100680 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100681 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200682 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100683 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200684};
685
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200686static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100687 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100688 16,
689 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100690 256 >> 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_256_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};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200696
697static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100698 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100699 16,
700 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100701 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100702 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100703 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200704 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100705 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200706};
707
708static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100709 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100710 16,
711 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100712 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100713 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100714 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200715 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100716 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200717};
718
719static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100720 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100721 16,
722 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100723 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100724 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100725 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200726 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100727 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200728};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200729#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200730
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200731#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000732
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200733#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000734
Gilles Peskine449bd832023-01-11 14:50:10 +0100735static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
736 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200737{
Gilles Peskine449bd832023-01-11 14:50:10 +0100738 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
739 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200740}
741
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200742#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100743static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
744 size_t length, unsigned char *iv,
745 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000746{
Gilles Peskine449bd832023-01-11 14:50:10 +0100747 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
748 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000749}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200750#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000751
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200752#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100753static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
754 size_t length, size_t *iv_off, unsigned char *iv,
755 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000756{
Gilles Peskine449bd832023-01-11 14:50:10 +0100757 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
758 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000759}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200760#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000761
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200762#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100763static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
764 unsigned char *nonce_counter, unsigned char *stream_block,
765 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000766{
Gilles Peskine449bd832023-01-11 14:50:10 +0100767 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
768 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000769}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200770#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000771
Gilles Peskine449bd832023-01-11 14:50:10 +0100772static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
773 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000774{
Gilles Peskine449bd832023-01-11 14:50:10 +0100775 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000776}
777
Gilles Peskine449bd832023-01-11 14:50:10 +0100778static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
779 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000780{
Gilles Peskine449bd832023-01-11 14:50:10 +0100781 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000782}
783
Gilles Peskine449bd832023-01-11 14:50:10 +0100784static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000785{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200786 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100787 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200788
Gilles Peskine449bd832023-01-11 14:50:10 +0100789 if (ctx == NULL) {
790 return NULL;
791 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200792
Gilles Peskine449bd832023-01-11 14:50:10 +0100793 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200794
Gilles Peskine449bd832023-01-11 14:50:10 +0100795 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000796}
797
Gilles Peskine449bd832023-01-11 14:50:10 +0100798static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000799{
Gilles Peskine449bd832023-01-11 14:50:10 +0100800 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
801 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000802}
803
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200804static const mbedtls_cipher_base_t camellia_info = {
805 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200806 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200807#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000808 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100809#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200810#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000811 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100812#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100813#if defined(MBEDTLS_CIPHER_MODE_OFB)
814 NULL,
815#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200816#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000817 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100818#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100819#if defined(MBEDTLS_CIPHER_MODE_XTS)
820 NULL,
821#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200822#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200823 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100824#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000825 camellia_setkey_enc_wrap,
826 camellia_setkey_dec_wrap,
827 camellia_ctx_alloc,
828 camellia_ctx_free
829};
830
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200831static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100832 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100833 16,
834 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100835 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100836 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100837 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200838 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100839 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200840};
841
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200842static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100843 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100844 16,
845 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100846 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100847 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100848 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200849 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100850 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200851};
852
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200853static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100854 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100855 16,
856 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100857 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100858 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100859 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200860 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100861 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200862};
863
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200864#if defined(MBEDTLS_CIPHER_MODE_CBC)
865static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100866 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100867 16,
868 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100869 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100870 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100871 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200872 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100873 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000874};
875
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200876static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100877 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100878 16,
879 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100880 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100881 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100882 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200883 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100884 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000885};
886
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200887static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100888 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100889 16,
890 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100891 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100892 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100893 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200894 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100895 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000896};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200897#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000898
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200899#if defined(MBEDTLS_CIPHER_MODE_CFB)
900static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100901 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100902 16,
903 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100904 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100905 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100906 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200907 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100908 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000909};
910
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200911static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100912 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100913 16,
914 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100915 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100916 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100917 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200918 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100919 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000920};
921
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200922static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100923 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100924 16,
925 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100926 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100927 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100928 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200929 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100930 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000931};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200932#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000933
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200934#if defined(MBEDTLS_CIPHER_MODE_CTR)
935static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100936 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100937 16,
938 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100939 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100940 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100941 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200942 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100943 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000944};
945
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200946static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100947 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100948 16,
949 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100950 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100951 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100952 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200953 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100954 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000955};
956
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200957static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100958 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100959 16,
960 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100961 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100962 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100963 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200964 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100965 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000966};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200967#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000968
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200969#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100970static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
971 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200972{
Gilles Peskine449bd832023-01-11 14:50:10 +0100973 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
974 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200975}
976
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200977static const mbedtls_cipher_base_t gcm_camellia_info = {
978 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200979 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200980#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200981 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100982#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200983#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200984 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100985#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100986#if defined(MBEDTLS_CIPHER_MODE_OFB)
987 NULL,
988#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200989#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200990 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100991#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100992#if defined(MBEDTLS_CIPHER_MODE_XTS)
993 NULL,
994#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200995#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200996 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100997#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200998 gcm_camellia_setkey_wrap,
999 gcm_camellia_setkey_wrap,
1000 gcm_ctx_alloc,
1001 gcm_ctx_free,
1002};
1003
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001004static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001005 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001006 16,
1007 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001008 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001009 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001010 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001011 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001012 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001013};
1014
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001015static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001016 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001017 16,
1018 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001019 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001020 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001021 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001022 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001023 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001024};
1025
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001026static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001027 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001028 16,
1029 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001030 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001031 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001032 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001033 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001034 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001035};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001036#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001037
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001038#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001039static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1040 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001041{
Gilles Peskine449bd832023-01-11 14:50:10 +01001042 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1043 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001044}
1045
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001046static const mbedtls_cipher_base_t ccm_camellia_info = {
1047 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001048 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001049#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001050 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001051#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001052#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001053 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001054#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001055#if defined(MBEDTLS_CIPHER_MODE_OFB)
1056 NULL,
1057#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001058#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001059 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001060#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001061#if defined(MBEDTLS_CIPHER_MODE_XTS)
1062 NULL,
1063#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001064#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001065 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001066#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001067 ccm_camellia_setkey_wrap,
1068 ccm_camellia_setkey_wrap,
1069 ccm_ctx_alloc,
1070 ccm_ctx_free,
1071};
1072
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001073static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001074 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001075 16,
1076 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001077 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001078 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001079 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001080 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001081 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001082};
1083
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001084static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001085 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001086 16,
1087 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001088 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001089 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001090 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001091 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001092 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001093};
1094
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001095static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001096 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001097 16,
1098 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001099 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001100 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001101 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001102 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001103 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001104};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001105
1106static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001107 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001108 16,
1109 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001110 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001111 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001112 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001113 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001114 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001115};
1116
1117static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001118 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001119 16,
1120 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001121 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001122 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001123 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001124 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001125 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001126};
1127
1128static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001129 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001130 16,
1131 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001132 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001133 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001134 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001135 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001136 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001137};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001138#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001139
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001140#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001141
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001142#if defined(MBEDTLS_ARIA_C)
1143
Gilles Peskine449bd832023-01-11 14:50:10 +01001144static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1145 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001146{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001147 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001148 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1149 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001150}
1151
1152#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001153static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1154 size_t length, unsigned char *iv,
1155 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001156{
Gilles Peskine449bd832023-01-11 14:50:10 +01001157 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1158 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001159}
1160#endif /* MBEDTLS_CIPHER_MODE_CBC */
1161
1162#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001163static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1164 size_t length, size_t *iv_off, unsigned char *iv,
1165 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001166{
Gilles Peskine449bd832023-01-11 14:50:10 +01001167 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1168 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001169}
1170#endif /* MBEDTLS_CIPHER_MODE_CFB */
1171
1172#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001173static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1174 unsigned char *nonce_counter, unsigned char *stream_block,
1175 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001176{
Gilles Peskine449bd832023-01-11 14:50:10 +01001177 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1178 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001179}
1180#endif /* MBEDTLS_CIPHER_MODE_CTR */
1181
Gilles Peskine449bd832023-01-11 14:50:10 +01001182static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1183 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001184{
Gilles Peskine449bd832023-01-11 14:50:10 +01001185 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001186}
1187
Gilles Peskine449bd832023-01-11 14:50:10 +01001188static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1189 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001190{
Gilles Peskine449bd832023-01-11 14:50:10 +01001191 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001192}
1193
Gilles Peskine449bd832023-01-11 14:50:10 +01001194static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001195{
1196 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001197 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001198
Gilles Peskine449bd832023-01-11 14:50:10 +01001199 if (ctx == NULL) {
1200 return NULL;
1201 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001202
Gilles Peskine449bd832023-01-11 14:50:10 +01001203 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001204
Gilles Peskine449bd832023-01-11 14:50:10 +01001205 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001206}
1207
Gilles Peskine449bd832023-01-11 14:50:10 +01001208static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001209{
Gilles Peskine449bd832023-01-11 14:50:10 +01001210 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1211 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001212}
1213
1214static const mbedtls_cipher_base_t aria_info = {
1215 MBEDTLS_CIPHER_ID_ARIA,
1216 aria_crypt_ecb_wrap,
1217#if defined(MBEDTLS_CIPHER_MODE_CBC)
1218 aria_crypt_cbc_wrap,
1219#endif
1220#if defined(MBEDTLS_CIPHER_MODE_CFB)
1221 aria_crypt_cfb128_wrap,
1222#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001223#if defined(MBEDTLS_CIPHER_MODE_OFB)
1224 NULL,
1225#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001226#if defined(MBEDTLS_CIPHER_MODE_CTR)
1227 aria_crypt_ctr_wrap,
1228#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001229#if defined(MBEDTLS_CIPHER_MODE_XTS)
1230 NULL,
1231#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001232#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1233 NULL,
1234#endif
1235 aria_setkey_enc_wrap,
1236 aria_setkey_dec_wrap,
1237 aria_ctx_alloc,
1238 aria_ctx_free
1239};
1240
1241static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001242 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001243 16,
1244 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001245 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001246 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001247 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001248 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001249 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001250};
1251
1252static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001253 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001254 16,
1255 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001256 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001257 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001258 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001259 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001260 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001261};
1262
1263static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001264 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001265 16,
1266 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001267 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001268 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001269 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001270 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001271 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001272};
1273
1274#if defined(MBEDTLS_CIPHER_MODE_CBC)
1275static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001276 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001277 16,
1278 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001279 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001280 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001281 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001282 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001283 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001284};
1285
1286static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001287 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001288 16,
1289 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001290 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001291 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001292 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001293 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001294 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001295};
1296
1297static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001298 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001299 16,
1300 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001301 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001302 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001303 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001304 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001305 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001306};
1307#endif /* MBEDTLS_CIPHER_MODE_CBC */
1308
1309#if defined(MBEDTLS_CIPHER_MODE_CFB)
1310static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001311 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001312 16,
1313 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001314 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001315 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001316 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001317 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001318 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001319};
1320
1321static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001322 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001323 16,
1324 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001325 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001326 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001327 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001328 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001329 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001330};
1331
1332static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001333 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001334 16,
1335 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001336 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001337 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001338 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001339 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001340 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001341};
1342#endif /* MBEDTLS_CIPHER_MODE_CFB */
1343
1344#if defined(MBEDTLS_CIPHER_MODE_CTR)
1345static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001346 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001347 16,
1348 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001349 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001350 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001351 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001352 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001353 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001354};
1355
1356static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001357 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001358 16,
1359 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001360 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001361 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001362 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001363 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001364 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001365};
1366
1367static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001368 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001369 16,
1370 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001371 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001372 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001373 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001374 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001375 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001376};
1377#endif /* MBEDTLS_CIPHER_MODE_CTR */
1378
1379#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001380static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1381 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001382{
Gilles Peskine449bd832023-01-11 14:50:10 +01001383 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1384 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001385}
1386
1387static const mbedtls_cipher_base_t gcm_aria_info = {
1388 MBEDTLS_CIPHER_ID_ARIA,
1389 NULL,
1390#if defined(MBEDTLS_CIPHER_MODE_CBC)
1391 NULL,
1392#endif
1393#if defined(MBEDTLS_CIPHER_MODE_CFB)
1394 NULL,
1395#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001396#if defined(MBEDTLS_CIPHER_MODE_OFB)
1397 NULL,
1398#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001399#if defined(MBEDTLS_CIPHER_MODE_CTR)
1400 NULL,
1401#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001402#if defined(MBEDTLS_CIPHER_MODE_XTS)
1403 NULL,
1404#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001405#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1406 NULL,
1407#endif
1408 gcm_aria_setkey_wrap,
1409 gcm_aria_setkey_wrap,
1410 gcm_ctx_alloc,
1411 gcm_ctx_free,
1412};
1413
1414static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001415 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001416 16,
1417 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001418 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001419 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001420 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001421 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001422 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001423};
1424
1425static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001426 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001427 16,
1428 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001429 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001430 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001431 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001432 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001433 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001434};
1435
1436static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001437 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001438 16,
1439 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001440 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001441 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001442 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001443 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001444 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001445};
1446#endif /* MBEDTLS_GCM_C */
1447
1448#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001449static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1450 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001451{
Gilles Peskine449bd832023-01-11 14:50:10 +01001452 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1453 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001454}
1455
1456static const mbedtls_cipher_base_t ccm_aria_info = {
1457 MBEDTLS_CIPHER_ID_ARIA,
1458 NULL,
1459#if defined(MBEDTLS_CIPHER_MODE_CBC)
1460 NULL,
1461#endif
1462#if defined(MBEDTLS_CIPHER_MODE_CFB)
1463 NULL,
1464#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001465#if defined(MBEDTLS_CIPHER_MODE_OFB)
1466 NULL,
1467#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001468#if defined(MBEDTLS_CIPHER_MODE_CTR)
1469 NULL,
1470#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001471#if defined(MBEDTLS_CIPHER_MODE_XTS)
1472 NULL,
1473#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001474#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1475 NULL,
1476#endif
1477 ccm_aria_setkey_wrap,
1478 ccm_aria_setkey_wrap,
1479 ccm_ctx_alloc,
1480 ccm_ctx_free,
1481};
1482
1483static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001484 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001485 16,
1486 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001487 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001488 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001489 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001490 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001491 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001492};
1493
1494static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001495 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001496 16,
1497 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001498 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001499 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001500 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001501 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001502 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001503};
1504
1505static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001506 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001507 16,
1508 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001509 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001510 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001511 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001512 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001513 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001514};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001515
1516static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001517 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001518 16,
1519 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001520 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001521 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001522 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001523 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001524 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001525};
1526
1527static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001528 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001529 16,
1530 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001531 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001532 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001533 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001534 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001535 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001536};
1537
1538static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001539 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001540 16,
1541 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001542 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001543 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001544 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001545 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001546 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001547};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001548#endif /* MBEDTLS_CCM_C */
1549
1550#endif /* MBEDTLS_ARIA_C */
1551
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001552#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001553
Gilles Peskine449bd832023-01-11 14:50:10 +01001554static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1555 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001556{
1557 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001558 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001559}
1560
Gilles Peskine449bd832023-01-11 14:50:10 +01001561static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1562 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001563{
1564 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001565 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001566}
1567
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001568#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001569static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1570 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001571{
Gilles Peskine449bd832023-01-11 14:50:10 +01001572 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1573 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001574}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001575#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001576
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001577#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001578static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1579 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001580{
Gilles Peskine449bd832023-01-11 14:50:10 +01001581 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1582 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001583}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001584#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001585
Gilles Peskine449bd832023-01-11 14:50:10 +01001586static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1587 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001588{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001589 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001590
Gilles Peskine449bd832023-01-11 14:50:10 +01001591 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001592}
1593
Gilles Peskine449bd832023-01-11 14:50:10 +01001594static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1595 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001596{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001597 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001598
Gilles Peskine449bd832023-01-11 14:50:10 +01001599 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001600}
1601
Gilles Peskine449bd832023-01-11 14:50:10 +01001602static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1603 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001604{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001605 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001606
Gilles Peskine449bd832023-01-11 14:50:10 +01001607 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001608}
1609
Gilles Peskine449bd832023-01-11 14:50:10 +01001610static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1611 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001612{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001613 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001614
Gilles Peskine449bd832023-01-11 14:50:10 +01001615 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001616}
1617
Gilles Peskine449bd832023-01-11 14:50:10 +01001618static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1619 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001620{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001621 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001622
Gilles Peskine449bd832023-01-11 14:50:10 +01001623 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001624}
1625
Gilles Peskine449bd832023-01-11 14:50:10 +01001626static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1627 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001628{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001629 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001630
Gilles Peskine449bd832023-01-11 14:50:10 +01001631 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001632}
1633
Gilles Peskine449bd832023-01-11 14:50:10 +01001634static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001635{
Gilles Peskine449bd832023-01-11 14:50:10 +01001636 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001637
Gilles Peskine449bd832023-01-11 14:50:10 +01001638 if (des == NULL) {
1639 return NULL;
1640 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001641
Gilles Peskine449bd832023-01-11 14:50:10 +01001642 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001643
Gilles Peskine449bd832023-01-11 14:50:10 +01001644 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001645}
1646
Gilles Peskine449bd832023-01-11 14:50:10 +01001647static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001648{
Gilles Peskine449bd832023-01-11 14:50:10 +01001649 mbedtls_des_free((mbedtls_des_context *) ctx);
1650 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001651}
1652
Gilles Peskine449bd832023-01-11 14:50:10 +01001653static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001654{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001655 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001656 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001657
Gilles Peskine449bd832023-01-11 14:50:10 +01001658 if (des3 == NULL) {
1659 return NULL;
1660 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001661
Gilles Peskine449bd832023-01-11 14:50:10 +01001662 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001663
Gilles Peskine449bd832023-01-11 14:50:10 +01001664 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001665}
1666
Gilles Peskine449bd832023-01-11 14:50:10 +01001667static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001668{
Gilles Peskine449bd832023-01-11 14:50:10 +01001669 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1670 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001671}
1672
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001673static const mbedtls_cipher_base_t des_info = {
1674 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001675 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001676#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001677 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001678#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001679#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001680 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001681#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001682#if defined(MBEDTLS_CIPHER_MODE_OFB)
1683 NULL,
1684#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001685#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001686 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001687#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001688#if defined(MBEDTLS_CIPHER_MODE_XTS)
1689 NULL,
1690#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001691#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001692 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001693#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001694 des_setkey_enc_wrap,
1695 des_setkey_dec_wrap,
1696 des_ctx_alloc,
1697 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001698};
1699
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001700static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001701 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001702 8,
1703 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001704 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001705 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001706 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001707 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001708 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001709};
1710
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001711#if defined(MBEDTLS_CIPHER_MODE_CBC)
1712static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001713 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001714 8,
1715 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001716 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001717 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001718 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001719 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001720 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001721};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001722#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001723
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001724static const mbedtls_cipher_base_t des_ede_info = {
1725 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001726 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001727#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001728 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001729#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001730#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001731 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001732#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001733#if defined(MBEDTLS_CIPHER_MODE_OFB)
1734 NULL,
1735#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001736#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001737 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001738#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001739#if defined(MBEDTLS_CIPHER_MODE_XTS)
1740 NULL,
1741#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001742#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001743 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001744#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001745 des3_set2key_enc_wrap,
1746 des3_set2key_dec_wrap,
1747 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001748 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001749};
1750
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001751static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001752 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001753 8,
1754 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001755 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001756 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001757 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001758 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001759 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001760};
1761
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001762#if defined(MBEDTLS_CIPHER_MODE_CBC)
1763static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001764 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001765 8,
1766 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001767 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001768 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001769 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001770 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001771 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001772};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001773#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001774
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001775static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001776 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001777 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001778#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001779 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001780#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001781#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001782 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001783#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001784#if defined(MBEDTLS_CIPHER_MODE_OFB)
1785 NULL,
1786#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001787#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001788 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001789#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001790#if defined(MBEDTLS_CIPHER_MODE_XTS)
1791 NULL,
1792#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001793#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001794 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001795#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001796 des3_set3key_enc_wrap,
1797 des3_set3key_dec_wrap,
1798 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001799 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001800};
1801
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001802static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001803 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001804 8,
1805 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001806 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001807 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001808 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001809 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001810 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001811};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001812#if defined(MBEDTLS_CIPHER_MODE_CBC)
1813static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001814 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001815 8,
1816 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001817 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001818 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001819 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001820 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001821 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001822};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001823#endif /* MBEDTLS_CIPHER_MODE_CBC */
1824#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001825
Daniel Kingbd920622016-05-15 19:56:20 -03001826#if defined(MBEDTLS_CHACHA20_C)
1827
Gilles Peskine449bd832023-01-11 14:50:10 +01001828static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1829 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001830{
Gilles Peskine449bd832023-01-11 14:50:10 +01001831 if (key_bitlen != 256U) {
1832 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1833 }
Daniel Kingbd920622016-05-15 19:56:20 -03001834
Gilles Peskine449bd832023-01-11 14:50:10 +01001835 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1836 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1837 }
Daniel Kingbd920622016-05-15 19:56:20 -03001838
Gilles Peskine449bd832023-01-11 14:50:10 +01001839 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001840}
1841
Gilles Peskine449bd832023-01-11 14:50:10 +01001842static int chacha20_stream_wrap(void *ctx, size_t length,
1843 const unsigned char *input,
1844 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001845{
Janos Follath24eed8d2019-11-22 13:21:35 +00001846 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001847
Gilles Peskine449bd832023-01-11 14:50:10 +01001848 ret = mbedtls_chacha20_update(ctx, length, input, output);
1849 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1850 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1851 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001852
Gilles Peskine449bd832023-01-11 14:50:10 +01001853 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001854}
1855
Gilles Peskine449bd832023-01-11 14:50:10 +01001856static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001857{
1858 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001859 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001860
Gilles Peskine449bd832023-01-11 14:50:10 +01001861 if (ctx == NULL) {
1862 return NULL;
1863 }
Daniel Kingbd920622016-05-15 19:56:20 -03001864
Gilles Peskine449bd832023-01-11 14:50:10 +01001865 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001866
Gilles Peskine449bd832023-01-11 14:50:10 +01001867 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001868}
1869
Gilles Peskine449bd832023-01-11 14:50:10 +01001870static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001871{
Gilles Peskine449bd832023-01-11 14:50:10 +01001872 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1873 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001874}
1875
1876static const mbedtls_cipher_base_t chacha20_base_info = {
1877 MBEDTLS_CIPHER_ID_CHACHA20,
1878 NULL,
1879#if defined(MBEDTLS_CIPHER_MODE_CBC)
1880 NULL,
1881#endif
1882#if defined(MBEDTLS_CIPHER_MODE_CFB)
1883 NULL,
1884#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001885#if defined(MBEDTLS_CIPHER_MODE_OFB)
1886 NULL,
1887#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001888#if defined(MBEDTLS_CIPHER_MODE_CTR)
1889 NULL,
1890#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001891#if defined(MBEDTLS_CIPHER_MODE_XTS)
1892 NULL,
1893#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001894#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001895 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001896#endif
1897 chacha20_setkey_wrap,
1898 chacha20_setkey_wrap,
1899 chacha20_ctx_alloc,
1900 chacha20_ctx_free
1901};
1902static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001903 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001904 1,
1905 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001906 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001907 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001908 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001909 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001910 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001911};
1912#endif /* MBEDTLS_CHACHA20_C */
1913
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001914#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001915
Gilles Peskine449bd832023-01-11 14:50:10 +01001916static int chachapoly_setkey_wrap(void *ctx,
1917 const unsigned char *key,
1918 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001919{
Gilles Peskine449bd832023-01-11 14:50:10 +01001920 if (key_bitlen != 256U) {
1921 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1922 }
Daniel King8fe47012016-05-17 20:33:28 -03001923
Gilles Peskine449bd832023-01-11 14:50:10 +01001924 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1925 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1926 }
Daniel King8fe47012016-05-17 20:33:28 -03001927
Gilles Peskine449bd832023-01-11 14:50:10 +01001928 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001929}
1930
Gilles Peskine449bd832023-01-11 14:50:10 +01001931static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001932{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001933 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001934 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001935
Gilles Peskine449bd832023-01-11 14:50:10 +01001936 if (ctx == NULL) {
1937 return NULL;
1938 }
Daniel King8fe47012016-05-17 20:33:28 -03001939
Gilles Peskine449bd832023-01-11 14:50:10 +01001940 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001941
Gilles Peskine449bd832023-01-11 14:50:10 +01001942 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001943}
1944
Gilles Peskine449bd832023-01-11 14:50:10 +01001945static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001946{
Gilles Peskine449bd832023-01-11 14:50:10 +01001947 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1948 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001949}
1950
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001951static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001952 MBEDTLS_CIPHER_ID_CHACHA20,
1953 NULL,
1954#if defined(MBEDTLS_CIPHER_MODE_CBC)
1955 NULL,
1956#endif
1957#if defined(MBEDTLS_CIPHER_MODE_CFB)
1958 NULL,
1959#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001960#if defined(MBEDTLS_CIPHER_MODE_OFB)
1961 NULL,
1962#endif
Daniel King8fe47012016-05-17 20:33:28 -03001963#if defined(MBEDTLS_CIPHER_MODE_CTR)
1964 NULL,
1965#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001966#if defined(MBEDTLS_CIPHER_MODE_XTS)
1967 NULL,
1968#endif
Daniel King8fe47012016-05-17 20:33:28 -03001969#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1970 NULL,
1971#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001972 chachapoly_setkey_wrap,
1973 chachapoly_setkey_wrap,
1974 chachapoly_ctx_alloc,
1975 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001976};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001977static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001978 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001979 1,
1980 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001981 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001982 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001983 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03001984 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001985 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03001986};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001987#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03001988
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001989#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01001990static int null_crypt_stream(void *ctx, size_t length,
1991 const unsigned char *input,
1992 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001993{
1994 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01001995 memmove(output, input, length);
1996 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001997}
1998
Gilles Peskine449bd832023-01-11 14:50:10 +01001999static int null_setkey(void *ctx, const unsigned char *key,
2000 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002001{
2002 ((void) ctx);
2003 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002004 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002005
Gilles Peskine449bd832023-01-11 14:50:10 +01002006 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002007}
2008
Gilles Peskine449bd832023-01-11 14:50:10 +01002009static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002010{
Gilles Peskine449bd832023-01-11 14:50:10 +01002011 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002012}
2013
Gilles Peskine449bd832023-01-11 14:50:10 +01002014static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002015{
2016 ((void) ctx);
2017}
2018
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002019static const mbedtls_cipher_base_t null_base_info = {
2020 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002021 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002022#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002023 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002024#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002025#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002026 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002027#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002028#if defined(MBEDTLS_CIPHER_MODE_OFB)
2029 NULL,
2030#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002031#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002032 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002033#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002034#if defined(MBEDTLS_CIPHER_MODE_XTS)
2035 NULL,
2036#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002037#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002038 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002039#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002040 null_setkey,
2041 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002042 null_ctx_alloc,
2043 null_ctx_free
2044};
2045
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002046static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002047 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002048 1,
2049 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002050 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002051 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002052 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002053 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002054 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002055};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002056#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002057
Jack Lloydffdf2882019-03-07 17:00:32 -05002058#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002059static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002060{
Gilles Peskine449bd832023-01-11 14:50:10 +01002061 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002062
Gilles Peskine449bd832023-01-11 14:50:10 +01002063 if (ctx != NULL) {
2064 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2065 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002066
Gilles Peskine449bd832023-01-11 14:50:10 +01002067 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002068}
2069
Gilles Peskine449bd832023-01-11 14:50:10 +01002070static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002071{
Gilles Peskine449bd832023-01-11 14:50:10 +01002072 mbedtls_nist_kw_free(ctx);
2073 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002074}
2075
Gilles Peskine449bd832023-01-11 14:50:10 +01002076static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2077 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002078{
Gilles Peskine449bd832023-01-11 14:50:10 +01002079 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2080 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002081}
2082
Gilles Peskine449bd832023-01-11 14:50:10 +01002083static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2084 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002085{
Gilles Peskine449bd832023-01-11 14:50:10 +01002086 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2087 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002088}
2089
2090static const mbedtls_cipher_base_t kw_aes_info = {
2091 MBEDTLS_CIPHER_ID_AES,
2092 NULL,
2093#if defined(MBEDTLS_CIPHER_MODE_CBC)
2094 NULL,
2095#endif
2096#if defined(MBEDTLS_CIPHER_MODE_CFB)
2097 NULL,
2098#endif
2099#if defined(MBEDTLS_CIPHER_MODE_OFB)
2100 NULL,
2101#endif
2102#if defined(MBEDTLS_CIPHER_MODE_CTR)
2103 NULL,
2104#endif
2105#if defined(MBEDTLS_CIPHER_MODE_XTS)
2106 NULL,
2107#endif
2108#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2109 NULL,
2110#endif
2111 kw_aes_setkey_wrap,
2112 kw_aes_setkey_unwrap,
2113 kw_ctx_alloc,
2114 kw_ctx_free,
2115};
2116
2117static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002118 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002119 16,
2120 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002121 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002122 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002123 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002124 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002125 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002126};
2127
2128static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002129 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002130 16,
2131 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002132 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002133 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002134 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002135 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002136 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002137};
2138
2139static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002140 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002141 16,
2142 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002143 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002144 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002145 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002146 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002147 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002148};
2149
2150static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002151 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002152 16,
2153 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002154 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002155 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002156 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002157 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002158 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002159};
2160
2161static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002162 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002163 16,
2164 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002165 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002166 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002167 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002168 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002169 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002170};
2171
2172static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002173 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002174 16,
2175 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002176 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002177 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002178 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002179 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002180 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002181};
2182#endif /* MBEDTLS_NIST_KW_C */
2183
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002184const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002185{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002186#if defined(MBEDTLS_AES_C)
2187 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2188 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2189 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2190#if defined(MBEDTLS_CIPHER_MODE_CBC)
2191 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2192 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2193 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002194#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002195#if defined(MBEDTLS_CIPHER_MODE_CFB)
2196 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2197 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2198 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002199#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002200#if defined(MBEDTLS_CIPHER_MODE_OFB)
2201 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2202 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2203 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2204#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002205#if defined(MBEDTLS_CIPHER_MODE_CTR)
2206 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2207 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2208 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002209#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002210#if defined(MBEDTLS_CIPHER_MODE_XTS)
2211 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2212 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2213#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002214#if defined(MBEDTLS_GCM_C)
2215 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2216 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2217 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002218#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002219#if defined(MBEDTLS_CCM_C)
2220 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2221 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2222 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002223 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
2224 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2225 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002226#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002227#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002228
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002229#if defined(MBEDTLS_CAMELLIA_C)
2230 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2231 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2232 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2233#if defined(MBEDTLS_CIPHER_MODE_CBC)
2234 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2235 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2236 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002237#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002238#if defined(MBEDTLS_CIPHER_MODE_CFB)
2239 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2240 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2241 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002242#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002243#if defined(MBEDTLS_CIPHER_MODE_CTR)
2244 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2245 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2246 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002247#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002248#if defined(MBEDTLS_GCM_C)
2249 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2250 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2251 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002252#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002253#if defined(MBEDTLS_CCM_C)
2254 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2255 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2256 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002257 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2258 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2259 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002260#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002261#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002262
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002263#if defined(MBEDTLS_ARIA_C)
2264 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2265 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2266 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2267#if defined(MBEDTLS_CIPHER_MODE_CBC)
2268 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2269 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2270 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2271#endif
2272#if defined(MBEDTLS_CIPHER_MODE_CFB)
2273 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2274 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2275 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2276#endif
2277#if defined(MBEDTLS_CIPHER_MODE_CTR)
2278 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2279 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2280 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2281#endif
2282#if defined(MBEDTLS_GCM_C)
2283 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2284 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2285 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2286#endif
2287#if defined(MBEDTLS_CCM_C)
2288 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2289 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2290 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002291 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2292 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2293 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002294#endif
2295#endif /* MBEDTLS_ARIA_C */
2296
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002297#if defined(MBEDTLS_DES_C)
2298 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2299 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2300 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2301#if defined(MBEDTLS_CIPHER_MODE_CBC)
2302 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2303 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2304 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002305#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002306#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002307
Daniel Kingbd920622016-05-15 19:56:20 -03002308#if defined(MBEDTLS_CHACHA20_C)
2309 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2310#endif
2311
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002312#if defined(MBEDTLS_CHACHAPOLY_C)
2313 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002314#endif
2315
Jack Lloydffdf2882019-03-07 17:00:32 -05002316#if defined(MBEDTLS_NIST_KW_C)
2317 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2318 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2319 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2320 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2321 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2322 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2323#endif
2324
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002325#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2326 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2327#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002328
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002329 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002330};
2331
Gilles Peskine449bd832023-01-11 14:50:10 +01002332#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2333 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002334int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002335
Dave Rodgman3b46b772023-06-24 13:25:06 +01002336const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002337#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002338 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002339#endif
2340#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002341 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002342#endif
2343#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002344 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002345#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002346#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002347 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002348#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002349#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002350 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002351#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002352#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002353 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002354#endif
2355#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002356 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002357#endif
2358#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002359 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002360#endif
2361#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002362 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002363#endif
2364#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002365 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002366#endif
2367#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002368 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002369#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002370#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002371 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002372#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002373#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002374 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002375#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002376#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002377 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002378#endif
2379#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002380 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002381#endif
2382#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002383 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002384#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002385#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002386 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002387#endif
2388};
2389
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002390#endif /* MBEDTLS_CIPHER_C */