blob: c99627c071cc46859ed61b7d030c9a1729a483e2 [file] [log] [blame]
Paul Bakker8123e9d2011-01-06 15:37:30 +00001/**
Paul Bakkerfae35f02013-03-13 10:33:51 +01002 * \file cipher_wrap.c
Paul Bakker9af723c2014-05-01 13:03:14 +02003 *
Manuel Pégourié-Gonnardb4fe3cb2015-01-22 16:11:05 +00004 * \brief Generic cipher wrapper for mbed TLS
Paul Bakker8123e9d2011-01-06 15:37:30 +00005 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
7 *
Bence Szépkúti1e148272020-08-07 13:07:28 +02008 * Copyright The Mbed TLS Contributors
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +02009 * SPDX-License-Identifier: Apache-2.0
10 *
11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
12 * not use this file except in compliance with the License.
13 * You may obtain a copy of the License at
14 *
15 * http://www.apache.org/licenses/LICENSE-2.0
16 *
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
Paul Bakker8123e9d2011-01-06 15:37:30 +000022 */
23
Gilles Peskinedb09ef62020-06-03 01:43:33 +020024#include "common.h"
Paul Bakker8123e9d2011-01-06 15:37:30 +000025
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020026#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000027
Chris Jonesdaacb592021-03-09 17:03:29 +000028#include "cipher_wrap.h"
Janos Follath24eed8d2019-11-22 13:21:35 +000029#include "mbedtls/error.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000030
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +020031#if defined(MBEDTLS_CHACHAPOLY_C)
32#include "mbedtls/chachapoly.h"
Daniel King8fe47012016-05-17 20:33:28 -030033#endif
34
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000036#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000037#endif
38
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020039#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000040#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000041#endif
42
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000043#if defined(MBEDTLS_ARIA_C)
44#include "mbedtls/aria.h"
45#endif
46
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000048#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000049#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000050
Daniel Kingbd920622016-05-15 19:56:20 -030051#if defined(MBEDTLS_CHACHA20_C)
52#include "mbedtls/chacha20.h"
53#endif
54
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000056#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020057#endif
58
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000060#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020061#endif
62
Jack Lloydffdf2882019-03-07 17:00:32 -050063#if defined(MBEDTLS_NIST_KW_C)
64#include "mbedtls/nist_kw.h"
65#endif
66
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000068#include <string.h>
69#endif
70
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000071#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020072
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020073#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020074/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +010075static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020076{
Gilles Peskine449bd832023-01-11 14:50:10 +010077 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020078
Gilles Peskine449bd832023-01-11 14:50:10 +010079 if (ctx != NULL) {
80 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
81 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020082
Gilles Peskine449bd832023-01-11 14:50:10 +010083 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020084}
85
Gilles Peskine449bd832023-01-11 14:50:10 +010086static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020087{
Gilles Peskine449bd832023-01-11 14:50:10 +010088 mbedtls_gcm_free(ctx);
89 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020090}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020091#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020092
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020093#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020094/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +010095static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020096{
Gilles Peskine449bd832023-01-11 14:50:10 +010097 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020098
Gilles Peskine449bd832023-01-11 14:50:10 +010099 if (ctx != NULL) {
100 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
101 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200102
Gilles Peskine449bd832023-01-11 14:50:10 +0100103 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200104}
105
Gilles Peskine449bd832023-01-11 14:50:10 +0100106static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200107{
Gilles Peskine449bd832023-01-11 14:50:10 +0100108 mbedtls_ccm_free(ctx);
109 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200110}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200111#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200112
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200113#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000114
Gilles Peskine449bd832023-01-11 14:50:10 +0100115static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
116 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200117{
Gilles Peskine449bd832023-01-11 14:50:10 +0100118 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200119}
120
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200121#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100122static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
123 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000124{
Gilles Peskine449bd832023-01-11 14:50:10 +0100125 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
126 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000127}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200128#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000129
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200130#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100131static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
132 size_t length, size_t *iv_off, unsigned char *iv,
133 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000134{
Gilles Peskine449bd832023-01-11 14:50:10 +0100135 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
136 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000137}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200138#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000139
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100140#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100141static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
142 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100143{
Gilles Peskine449bd832023-01-11 14:50:10 +0100144 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
145 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100146}
147#endif /* MBEDTLS_CIPHER_MODE_OFB */
148
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200149#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100150static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
151 unsigned char *nonce_counter, unsigned char *stream_block,
152 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000153{
Gilles Peskine449bd832023-01-11 14:50:10 +0100154 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
155 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000156}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200157#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000158
Jaeden Ameroc6539902018-04-30 17:17:41 +0100159#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100160static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
161 size_t length,
162 const unsigned char data_unit[16],
163 const unsigned char *input,
164 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100165{
166 mbedtls_aes_xts_context *xts_ctx = ctx;
167 int mode;
168
Gilles Peskine449bd832023-01-11 14:50:10 +0100169 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100170 case MBEDTLS_ENCRYPT:
171 mode = MBEDTLS_AES_ENCRYPT;
172 break;
173 case MBEDTLS_DECRYPT:
174 mode = MBEDTLS_AES_DECRYPT;
175 break;
176 default:
177 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
178 }
179
Gilles Peskine449bd832023-01-11 14:50:10 +0100180 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
181 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100182}
183#endif /* MBEDTLS_CIPHER_MODE_XTS */
184
Gilles Peskine449bd832023-01-11 14:50:10 +0100185static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
186 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000187{
Gilles Peskine449bd832023-01-11 14:50:10 +0100188 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000189}
190
Gilles Peskine449bd832023-01-11 14:50:10 +0100191static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
192 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000193{
Gilles Peskine449bd832023-01-11 14:50:10 +0100194 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000195}
196
Gilles Peskine449bd832023-01-11 14:50:10 +0100197static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000198{
Gilles Peskine449bd832023-01-11 14:50:10 +0100199 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200200
Gilles Peskine449bd832023-01-11 14:50:10 +0100201 if (aes == NULL) {
202 return NULL;
203 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200204
Gilles Peskine449bd832023-01-11 14:50:10 +0100205 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200206
Gilles Peskine449bd832023-01-11 14:50:10 +0100207 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000208}
209
Gilles Peskine449bd832023-01-11 14:50:10 +0100210static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000211{
Gilles Peskine449bd832023-01-11 14:50:10 +0100212 mbedtls_aes_free((mbedtls_aes_context *) ctx);
213 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000214}
215
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200216static const mbedtls_cipher_base_t aes_info = {
217 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200218 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200219#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000220 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100221#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200222#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000223 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100224#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100225#if defined(MBEDTLS_CIPHER_MODE_OFB)
226 aes_crypt_ofb_wrap,
227#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200228#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000229 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100230#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100231#if defined(MBEDTLS_CIPHER_MODE_XTS)
232 NULL,
233#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200234#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200235 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100236#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000237 aes_setkey_enc_wrap,
238 aes_setkey_dec_wrap,
239 aes_ctx_alloc,
240 aes_ctx_free
241};
242
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200243static const mbedtls_cipher_info_t aes_128_ecb_info = {
244 MBEDTLS_CIPHER_AES_128_ECB,
245 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200246 128,
247 "AES-128-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300248 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200249 0,
250 16,
251 &aes_info
252};
253
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200254static const mbedtls_cipher_info_t aes_192_ecb_info = {
255 MBEDTLS_CIPHER_AES_192_ECB,
256 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200257 192,
258 "AES-192-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300259 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200260 0,
261 16,
262 &aes_info
263};
264
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200265static const mbedtls_cipher_info_t aes_256_ecb_info = {
266 MBEDTLS_CIPHER_AES_256_ECB,
267 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200268 256,
269 "AES-256-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300270 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200271 0,
272 16,
273 &aes_info
274};
275
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200276#if defined(MBEDTLS_CIPHER_MODE_CBC)
277static const mbedtls_cipher_info_t aes_128_cbc_info = {
278 MBEDTLS_CIPHER_AES_128_CBC,
279 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000280 128,
281 "AES-128-CBC",
282 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200283 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000284 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000285 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000286};
287
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200288static const mbedtls_cipher_info_t aes_192_cbc_info = {
289 MBEDTLS_CIPHER_AES_192_CBC,
290 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000291 192,
292 "AES-192-CBC",
293 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200294 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000295 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000296 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000297};
298
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200299static const mbedtls_cipher_info_t aes_256_cbc_info = {
300 MBEDTLS_CIPHER_AES_256_CBC,
301 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000302 256,
303 "AES-256-CBC",
304 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200305 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000306 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000307 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000308};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200309#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000310
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200311#if defined(MBEDTLS_CIPHER_MODE_CFB)
312static const mbedtls_cipher_info_t aes_128_cfb128_info = {
313 MBEDTLS_CIPHER_AES_128_CFB128,
314 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000315 128,
316 "AES-128-CFB128",
317 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200318 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000319 16,
320 &aes_info
321};
322
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200323static const mbedtls_cipher_info_t aes_192_cfb128_info = {
324 MBEDTLS_CIPHER_AES_192_CFB128,
325 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000326 192,
327 "AES-192-CFB128",
328 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200329 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000330 16,
331 &aes_info
332};
333
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200334static const mbedtls_cipher_info_t aes_256_cfb128_info = {
335 MBEDTLS_CIPHER_AES_256_CFB128,
336 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000337 256,
338 "AES-256-CFB128",
339 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200340 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000341 16,
342 &aes_info
343};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200344#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000345
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100346#if defined(MBEDTLS_CIPHER_MODE_OFB)
347static const mbedtls_cipher_info_t aes_128_ofb_info = {
348 MBEDTLS_CIPHER_AES_128_OFB,
349 MBEDTLS_MODE_OFB,
350 128,
351 "AES-128-OFB",
352 16,
353 0,
354 16,
355 &aes_info
356};
357
358static const mbedtls_cipher_info_t aes_192_ofb_info = {
359 MBEDTLS_CIPHER_AES_192_OFB,
360 MBEDTLS_MODE_OFB,
361 192,
362 "AES-192-OFB",
363 16,
364 0,
365 16,
366 &aes_info
367};
368
369static const mbedtls_cipher_info_t aes_256_ofb_info = {
370 MBEDTLS_CIPHER_AES_256_OFB,
371 MBEDTLS_MODE_OFB,
372 256,
373 "AES-256-OFB",
374 16,
375 0,
376 16,
377 &aes_info
378};
379#endif /* MBEDTLS_CIPHER_MODE_OFB */
380
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200381#if defined(MBEDTLS_CIPHER_MODE_CTR)
382static const mbedtls_cipher_info_t aes_128_ctr_info = {
383 MBEDTLS_CIPHER_AES_128_CTR,
384 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000385 128,
386 "AES-128-CTR",
387 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200388 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000389 16,
390 &aes_info
391};
392
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200393static const mbedtls_cipher_info_t aes_192_ctr_info = {
394 MBEDTLS_CIPHER_AES_192_CTR,
395 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000396 192,
397 "AES-192-CTR",
398 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200399 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000400 16,
401 &aes_info
402};
403
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200404static const mbedtls_cipher_info_t aes_256_ctr_info = {
405 MBEDTLS_CIPHER_AES_256_CTR,
406 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000407 256,
408 "AES-256-CTR",
409 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200410 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000411 16,
412 &aes_info
413};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200414#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000415
Jaeden Ameroc6539902018-04-30 17:17:41 +0100416#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100417static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
418 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100419{
420 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100421 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100422}
423
Gilles Peskine449bd832023-01-11 14:50:10 +0100424static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
425 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100426{
427 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100428 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100429}
430
Gilles Peskine449bd832023-01-11 14:50:10 +0100431static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100432{
Gilles Peskine449bd832023-01-11 14:50:10 +0100433 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100434
Gilles Peskine449bd832023-01-11 14:50:10 +0100435 if (xts_ctx != NULL) {
436 mbedtls_aes_xts_init(xts_ctx);
437 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100438
Gilles Peskine449bd832023-01-11 14:50:10 +0100439 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100440}
441
Gilles Peskine449bd832023-01-11 14:50:10 +0100442static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100443{
444 mbedtls_aes_xts_context *xts_ctx = ctx;
445
Gilles Peskine449bd832023-01-11 14:50:10 +0100446 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100447 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100448 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100449
Gilles Peskine449bd832023-01-11 14:50:10 +0100450 mbedtls_aes_xts_free(xts_ctx);
451 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100452}
453
454static const mbedtls_cipher_base_t xts_aes_info = {
455 MBEDTLS_CIPHER_ID_AES,
456 NULL,
457#if defined(MBEDTLS_CIPHER_MODE_CBC)
458 NULL,
459#endif
460#if defined(MBEDTLS_CIPHER_MODE_CFB)
461 NULL,
462#endif
463#if defined(MBEDTLS_CIPHER_MODE_OFB)
464 NULL,
465#endif
466#if defined(MBEDTLS_CIPHER_MODE_CTR)
467 NULL,
468#endif
469#if defined(MBEDTLS_CIPHER_MODE_XTS)
470 aes_crypt_xts_wrap,
471#endif
472#if defined(MBEDTLS_CIPHER_MODE_STREAM)
473 NULL,
474#endif
475 xts_aes_setkey_enc_wrap,
476 xts_aes_setkey_dec_wrap,
477 xts_aes_ctx_alloc,
478 xts_aes_ctx_free
479};
480
481static const mbedtls_cipher_info_t aes_128_xts_info = {
482 MBEDTLS_CIPHER_AES_128_XTS,
483 MBEDTLS_MODE_XTS,
484 256,
485 "AES-128-XTS",
486 16,
487 0,
488 16,
489 &xts_aes_info
490};
491
492static const mbedtls_cipher_info_t aes_256_xts_info = {
493 MBEDTLS_CIPHER_AES_256_XTS,
494 MBEDTLS_MODE_XTS,
495 512,
496 "AES-256-XTS",
497 16,
498 0,
499 16,
500 &xts_aes_info
501};
502#endif /* MBEDTLS_CIPHER_MODE_XTS */
503
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200504#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100505static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
506 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200507{
Gilles Peskine449bd832023-01-11 14:50:10 +0100508 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
509 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200510}
511
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200512static const mbedtls_cipher_base_t gcm_aes_info = {
513 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200514 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200515#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200516 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100517#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200518#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200519 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100520#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100521#if defined(MBEDTLS_CIPHER_MODE_OFB)
522 NULL,
523#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200524#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200525 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100526#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100527#if defined(MBEDTLS_CIPHER_MODE_XTS)
528 NULL,
529#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200530#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200531 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100532#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200533 gcm_aes_setkey_wrap,
534 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200535 gcm_ctx_alloc,
536 gcm_ctx_free,
537};
538
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200539static const mbedtls_cipher_info_t aes_128_gcm_info = {
540 MBEDTLS_CIPHER_AES_128_GCM,
541 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100542 128,
543 "AES-128-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200544 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200545 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100546 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200547 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100548};
549
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200550static const mbedtls_cipher_info_t aes_192_gcm_info = {
551 MBEDTLS_CIPHER_AES_192_GCM,
552 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200553 192,
554 "AES-192-GCM",
555 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200556 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200557 16,
558 &gcm_aes_info
559};
560
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200561static const mbedtls_cipher_info_t aes_256_gcm_info = {
562 MBEDTLS_CIPHER_AES_256_GCM,
563 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100564 256,
565 "AES-256-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200566 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200567 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100568 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200569 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100570};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200571#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100572
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200573#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100574static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
575 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200576{
Gilles Peskine449bd832023-01-11 14:50:10 +0100577 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
578 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200579}
580
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200581static const mbedtls_cipher_base_t ccm_aes_info = {
582 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200583 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200584#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200585 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100586#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200587#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200588 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100589#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100590#if defined(MBEDTLS_CIPHER_MODE_OFB)
591 NULL,
592#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200593#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200594 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100595#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100596#if defined(MBEDTLS_CIPHER_MODE_XTS)
597 NULL,
598#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200599#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200600 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100601#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200602 ccm_aes_setkey_wrap,
603 ccm_aes_setkey_wrap,
604 ccm_ctx_alloc,
605 ccm_ctx_free,
606};
607
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200608static const mbedtls_cipher_info_t aes_128_ccm_info = {
609 MBEDTLS_CIPHER_AES_128_CCM,
610 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200611 128,
612 "AES-128-CCM",
613 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200614 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200615 16,
616 &ccm_aes_info
617};
618
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200619static const mbedtls_cipher_info_t aes_192_ccm_info = {
620 MBEDTLS_CIPHER_AES_192_CCM,
621 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200622 192,
623 "AES-192-CCM",
624 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200625 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200626 16,
627 &ccm_aes_info
628};
629
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200630static const mbedtls_cipher_info_t aes_256_ccm_info = {
631 MBEDTLS_CIPHER_AES_256_CCM,
632 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200633 256,
634 "AES-256-CCM",
635 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200636 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200637 16,
638 &ccm_aes_info
639};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200640
641static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
642 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
643 MBEDTLS_MODE_CCM_STAR_NO_TAG,
644 128,
645 "AES-128-CCM*-NO-TAG",
646 12,
647 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
648 16,
649 &ccm_aes_info
650};
651
652static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
653 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
654 MBEDTLS_MODE_CCM_STAR_NO_TAG,
655 192,
656 "AES-192-CCM*-NO-TAG",
657 12,
658 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
659 16,
660 &ccm_aes_info
661};
662
663static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
664 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
665 MBEDTLS_MODE_CCM_STAR_NO_TAG,
666 256,
667 "AES-256-CCM*-NO-TAG",
668 12,
669 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
670 16,
671 &ccm_aes_info
672};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200673#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200674
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200675#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000676
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200677#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000678
Gilles Peskine449bd832023-01-11 14:50:10 +0100679static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
680 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200681{
Gilles Peskine449bd832023-01-11 14:50:10 +0100682 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
683 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200684}
685
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200686#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100687static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
688 size_t length, unsigned char *iv,
689 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000690{
Gilles Peskine449bd832023-01-11 14:50:10 +0100691 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
692 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000693}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200694#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000695
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200696#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100697static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
698 size_t length, size_t *iv_off, unsigned char *iv,
699 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000700{
Gilles Peskine449bd832023-01-11 14:50:10 +0100701 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
702 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000703}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200704#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000705
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200706#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100707static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
708 unsigned char *nonce_counter, unsigned char *stream_block,
709 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000710{
Gilles Peskine449bd832023-01-11 14:50:10 +0100711 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
712 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000713}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200714#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000715
Gilles Peskine449bd832023-01-11 14:50:10 +0100716static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
717 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000718{
Gilles Peskine449bd832023-01-11 14:50:10 +0100719 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000720}
721
Gilles Peskine449bd832023-01-11 14:50:10 +0100722static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
723 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000724{
Gilles Peskine449bd832023-01-11 14:50:10 +0100725 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000726}
727
Gilles Peskine449bd832023-01-11 14:50:10 +0100728static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000729{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200730 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100731 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200732
Gilles Peskine449bd832023-01-11 14:50:10 +0100733 if (ctx == NULL) {
734 return NULL;
735 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200736
Gilles Peskine449bd832023-01-11 14:50:10 +0100737 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200738
Gilles Peskine449bd832023-01-11 14:50:10 +0100739 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000740}
741
Gilles Peskine449bd832023-01-11 14:50:10 +0100742static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000743{
Gilles Peskine449bd832023-01-11 14:50:10 +0100744 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
745 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000746}
747
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200748static const mbedtls_cipher_base_t camellia_info = {
749 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200750 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200751#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000752 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100753#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200754#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000755 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100756#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100757#if defined(MBEDTLS_CIPHER_MODE_OFB)
758 NULL,
759#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200760#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000761 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100762#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100763#if defined(MBEDTLS_CIPHER_MODE_XTS)
764 NULL,
765#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200766#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200767 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100768#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000769 camellia_setkey_enc_wrap,
770 camellia_setkey_dec_wrap,
771 camellia_ctx_alloc,
772 camellia_ctx_free
773};
774
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200775static const mbedtls_cipher_info_t camellia_128_ecb_info = {
776 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
777 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200778 128,
779 "CAMELLIA-128-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100780 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200781 0,
782 16,
783 &camellia_info
784};
785
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200786static const mbedtls_cipher_info_t camellia_192_ecb_info = {
787 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
788 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200789 192,
790 "CAMELLIA-192-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100791 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200792 0,
793 16,
794 &camellia_info
795};
796
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200797static const mbedtls_cipher_info_t camellia_256_ecb_info = {
798 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
799 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200800 256,
801 "CAMELLIA-256-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100802 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200803 0,
804 16,
805 &camellia_info
806};
807
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200808#if defined(MBEDTLS_CIPHER_MODE_CBC)
809static const mbedtls_cipher_info_t camellia_128_cbc_info = {
810 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
811 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000812 128,
813 "CAMELLIA-128-CBC",
814 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200815 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000816 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000817 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000818};
819
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200820static const mbedtls_cipher_info_t camellia_192_cbc_info = {
821 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
822 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000823 192,
824 "CAMELLIA-192-CBC",
825 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200826 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000827 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000828 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000829};
830
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200831static const mbedtls_cipher_info_t camellia_256_cbc_info = {
832 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
833 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000834 256,
835 "CAMELLIA-256-CBC",
836 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200837 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000838 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000839 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000840};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200841#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000842
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200843#if defined(MBEDTLS_CIPHER_MODE_CFB)
844static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
845 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
846 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000847 128,
848 "CAMELLIA-128-CFB128",
849 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200850 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000851 16,
852 &camellia_info
853};
854
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200855static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
856 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
857 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000858 192,
859 "CAMELLIA-192-CFB128",
860 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200861 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000862 16,
863 &camellia_info
864};
865
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200866static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
867 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
868 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000869 256,
870 "CAMELLIA-256-CFB128",
871 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200872 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000873 16,
874 &camellia_info
875};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200876#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000877
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200878#if defined(MBEDTLS_CIPHER_MODE_CTR)
879static const mbedtls_cipher_info_t camellia_128_ctr_info = {
880 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
881 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000882 128,
883 "CAMELLIA-128-CTR",
884 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200885 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000886 16,
887 &camellia_info
888};
889
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200890static const mbedtls_cipher_info_t camellia_192_ctr_info = {
891 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
892 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000893 192,
894 "CAMELLIA-192-CTR",
895 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200896 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000897 16,
898 &camellia_info
899};
900
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200901static const mbedtls_cipher_info_t camellia_256_ctr_info = {
902 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
903 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000904 256,
905 "CAMELLIA-256-CTR",
906 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200907 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000908 16,
909 &camellia_info
910};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200911#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000912
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200913#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100914static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
915 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200916{
Gilles Peskine449bd832023-01-11 14:50:10 +0100917 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
918 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200919}
920
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200921static const mbedtls_cipher_base_t gcm_camellia_info = {
922 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200923 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200924#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200925 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100926#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200927#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200928 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100929#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100930#if defined(MBEDTLS_CIPHER_MODE_OFB)
931 NULL,
932#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200933#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200934 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100935#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100936#if defined(MBEDTLS_CIPHER_MODE_XTS)
937 NULL,
938#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200939#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200940 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100941#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200942 gcm_camellia_setkey_wrap,
943 gcm_camellia_setkey_wrap,
944 gcm_ctx_alloc,
945 gcm_ctx_free,
946};
947
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200948static const mbedtls_cipher_info_t camellia_128_gcm_info = {
949 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
950 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200951 128,
952 "CAMELLIA-128-GCM",
953 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200954 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200955 16,
956 &gcm_camellia_info
957};
958
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200959static const mbedtls_cipher_info_t camellia_192_gcm_info = {
960 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
961 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200962 192,
963 "CAMELLIA-192-GCM",
964 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200965 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200966 16,
967 &gcm_camellia_info
968};
969
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200970static const mbedtls_cipher_info_t camellia_256_gcm_info = {
971 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
972 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200973 256,
974 "CAMELLIA-256-GCM",
975 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200976 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200977 16,
978 &gcm_camellia_info
979};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200980#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200981
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200982#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100983static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
984 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200985{
Gilles Peskine449bd832023-01-11 14:50:10 +0100986 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
987 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200988}
989
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200990static const mbedtls_cipher_base_t ccm_camellia_info = {
991 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200992 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200993#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200994 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100995#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200996#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200997 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100998#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100999#if defined(MBEDTLS_CIPHER_MODE_OFB)
1000 NULL,
1001#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001002#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001003 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001004#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001005#if defined(MBEDTLS_CIPHER_MODE_XTS)
1006 NULL,
1007#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001008#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001009 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001010#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001011 ccm_camellia_setkey_wrap,
1012 ccm_camellia_setkey_wrap,
1013 ccm_ctx_alloc,
1014 ccm_ctx_free,
1015};
1016
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001017static const mbedtls_cipher_info_t camellia_128_ccm_info = {
1018 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
1019 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001020 128,
1021 "CAMELLIA-128-CCM",
1022 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001023 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001024 16,
1025 &ccm_camellia_info
1026};
1027
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001028static const mbedtls_cipher_info_t camellia_192_ccm_info = {
1029 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
1030 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001031 192,
1032 "CAMELLIA-192-CCM",
1033 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001034 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001035 16,
1036 &ccm_camellia_info
1037};
1038
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001039static const mbedtls_cipher_info_t camellia_256_ccm_info = {
1040 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
1041 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001042 256,
1043 "CAMELLIA-256-CCM",
1044 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001045 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001046 16,
1047 &ccm_camellia_info
1048};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001049
1050static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
1051 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
1052 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1053 128,
1054 "CAMELLIA-128-CCM*-NO-TAG",
1055 12,
1056 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1057 16,
1058 &ccm_camellia_info
1059};
1060
1061static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
1062 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
1063 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1064 192,
1065 "CAMELLIA-192-CCM*-NO-TAG",
1066 12,
1067 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1068 16,
1069 &ccm_camellia_info
1070};
1071
1072static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
1073 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
1074 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1075 256,
1076 "CAMELLIA-256-CCM*-NO-TAG",
1077 12,
1078 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1079 16,
1080 &ccm_camellia_info
1081};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001082#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001083
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001084#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001085
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001086#if defined(MBEDTLS_ARIA_C)
1087
Gilles Peskine449bd832023-01-11 14:50:10 +01001088static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1089 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001090{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001091 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001092 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1093 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001094}
1095
1096#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001097static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1098 size_t length, unsigned char *iv,
1099 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001100{
Gilles Peskine449bd832023-01-11 14:50:10 +01001101 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1102 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001103}
1104#endif /* MBEDTLS_CIPHER_MODE_CBC */
1105
1106#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001107static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1108 size_t length, size_t *iv_off, unsigned char *iv,
1109 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001110{
Gilles Peskine449bd832023-01-11 14:50:10 +01001111 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1112 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001113}
1114#endif /* MBEDTLS_CIPHER_MODE_CFB */
1115
1116#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001117static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1118 unsigned char *nonce_counter, unsigned char *stream_block,
1119 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001120{
Gilles Peskine449bd832023-01-11 14:50:10 +01001121 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1122 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001123}
1124#endif /* MBEDTLS_CIPHER_MODE_CTR */
1125
Gilles Peskine449bd832023-01-11 14:50:10 +01001126static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1127 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001128{
Gilles Peskine449bd832023-01-11 14:50:10 +01001129 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001130}
1131
Gilles Peskine449bd832023-01-11 14:50:10 +01001132static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1133 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001134{
Gilles Peskine449bd832023-01-11 14:50:10 +01001135 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001136}
1137
Gilles Peskine449bd832023-01-11 14:50:10 +01001138static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001139{
1140 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001141 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001142
Gilles Peskine449bd832023-01-11 14:50:10 +01001143 if (ctx == NULL) {
1144 return NULL;
1145 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001146
Gilles Peskine449bd832023-01-11 14:50:10 +01001147 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001148
Gilles Peskine449bd832023-01-11 14:50:10 +01001149 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001150}
1151
Gilles Peskine449bd832023-01-11 14:50:10 +01001152static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001153{
Gilles Peskine449bd832023-01-11 14:50:10 +01001154 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1155 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001156}
1157
1158static const mbedtls_cipher_base_t aria_info = {
1159 MBEDTLS_CIPHER_ID_ARIA,
1160 aria_crypt_ecb_wrap,
1161#if defined(MBEDTLS_CIPHER_MODE_CBC)
1162 aria_crypt_cbc_wrap,
1163#endif
1164#if defined(MBEDTLS_CIPHER_MODE_CFB)
1165 aria_crypt_cfb128_wrap,
1166#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001167#if defined(MBEDTLS_CIPHER_MODE_OFB)
1168 NULL,
1169#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001170#if defined(MBEDTLS_CIPHER_MODE_CTR)
1171 aria_crypt_ctr_wrap,
1172#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001173#if defined(MBEDTLS_CIPHER_MODE_XTS)
1174 NULL,
1175#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001176#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1177 NULL,
1178#endif
1179 aria_setkey_enc_wrap,
1180 aria_setkey_dec_wrap,
1181 aria_ctx_alloc,
1182 aria_ctx_free
1183};
1184
1185static const mbedtls_cipher_info_t aria_128_ecb_info = {
1186 MBEDTLS_CIPHER_ARIA_128_ECB,
1187 MBEDTLS_MODE_ECB,
1188 128,
1189 "ARIA-128-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001190 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001191 0,
1192 16,
1193 &aria_info
1194};
1195
1196static const mbedtls_cipher_info_t aria_192_ecb_info = {
1197 MBEDTLS_CIPHER_ARIA_192_ECB,
1198 MBEDTLS_MODE_ECB,
1199 192,
1200 "ARIA-192-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001201 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001202 0,
1203 16,
1204 &aria_info
1205};
1206
1207static const mbedtls_cipher_info_t aria_256_ecb_info = {
1208 MBEDTLS_CIPHER_ARIA_256_ECB,
1209 MBEDTLS_MODE_ECB,
1210 256,
1211 "ARIA-256-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001212 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001213 0,
1214 16,
1215 &aria_info
1216};
1217
1218#if defined(MBEDTLS_CIPHER_MODE_CBC)
1219static const mbedtls_cipher_info_t aria_128_cbc_info = {
1220 MBEDTLS_CIPHER_ARIA_128_CBC,
1221 MBEDTLS_MODE_CBC,
1222 128,
1223 "ARIA-128-CBC",
1224 16,
1225 0,
1226 16,
1227 &aria_info
1228};
1229
1230static const mbedtls_cipher_info_t aria_192_cbc_info = {
1231 MBEDTLS_CIPHER_ARIA_192_CBC,
1232 MBEDTLS_MODE_CBC,
1233 192,
1234 "ARIA-192-CBC",
1235 16,
1236 0,
1237 16,
1238 &aria_info
1239};
1240
1241static const mbedtls_cipher_info_t aria_256_cbc_info = {
1242 MBEDTLS_CIPHER_ARIA_256_CBC,
1243 MBEDTLS_MODE_CBC,
1244 256,
1245 "ARIA-256-CBC",
1246 16,
1247 0,
1248 16,
1249 &aria_info
1250};
1251#endif /* MBEDTLS_CIPHER_MODE_CBC */
1252
1253#if defined(MBEDTLS_CIPHER_MODE_CFB)
1254static const mbedtls_cipher_info_t aria_128_cfb128_info = {
1255 MBEDTLS_CIPHER_ARIA_128_CFB128,
1256 MBEDTLS_MODE_CFB,
1257 128,
1258 "ARIA-128-CFB128",
1259 16,
1260 0,
1261 16,
1262 &aria_info
1263};
1264
1265static const mbedtls_cipher_info_t aria_192_cfb128_info = {
1266 MBEDTLS_CIPHER_ARIA_192_CFB128,
1267 MBEDTLS_MODE_CFB,
1268 192,
1269 "ARIA-192-CFB128",
1270 16,
1271 0,
1272 16,
1273 &aria_info
1274};
1275
1276static const mbedtls_cipher_info_t aria_256_cfb128_info = {
1277 MBEDTLS_CIPHER_ARIA_256_CFB128,
1278 MBEDTLS_MODE_CFB,
1279 256,
1280 "ARIA-256-CFB128",
1281 16,
1282 0,
1283 16,
1284 &aria_info
1285};
1286#endif /* MBEDTLS_CIPHER_MODE_CFB */
1287
1288#if defined(MBEDTLS_CIPHER_MODE_CTR)
1289static const mbedtls_cipher_info_t aria_128_ctr_info = {
1290 MBEDTLS_CIPHER_ARIA_128_CTR,
1291 MBEDTLS_MODE_CTR,
1292 128,
1293 "ARIA-128-CTR",
1294 16,
1295 0,
1296 16,
1297 &aria_info
1298};
1299
1300static const mbedtls_cipher_info_t aria_192_ctr_info = {
1301 MBEDTLS_CIPHER_ARIA_192_CTR,
1302 MBEDTLS_MODE_CTR,
1303 192,
1304 "ARIA-192-CTR",
1305 16,
1306 0,
1307 16,
1308 &aria_info
1309};
1310
1311static const mbedtls_cipher_info_t aria_256_ctr_info = {
1312 MBEDTLS_CIPHER_ARIA_256_CTR,
1313 MBEDTLS_MODE_CTR,
1314 256,
1315 "ARIA-256-CTR",
1316 16,
1317 0,
1318 16,
1319 &aria_info
1320};
1321#endif /* MBEDTLS_CIPHER_MODE_CTR */
1322
1323#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001324static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1325 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001326{
Gilles Peskine449bd832023-01-11 14:50:10 +01001327 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1328 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001329}
1330
1331static const mbedtls_cipher_base_t gcm_aria_info = {
1332 MBEDTLS_CIPHER_ID_ARIA,
1333 NULL,
1334#if defined(MBEDTLS_CIPHER_MODE_CBC)
1335 NULL,
1336#endif
1337#if defined(MBEDTLS_CIPHER_MODE_CFB)
1338 NULL,
1339#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001340#if defined(MBEDTLS_CIPHER_MODE_OFB)
1341 NULL,
1342#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001343#if defined(MBEDTLS_CIPHER_MODE_CTR)
1344 NULL,
1345#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001346#if defined(MBEDTLS_CIPHER_MODE_XTS)
1347 NULL,
1348#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001349#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1350 NULL,
1351#endif
1352 gcm_aria_setkey_wrap,
1353 gcm_aria_setkey_wrap,
1354 gcm_ctx_alloc,
1355 gcm_ctx_free,
1356};
1357
1358static const mbedtls_cipher_info_t aria_128_gcm_info = {
1359 MBEDTLS_CIPHER_ARIA_128_GCM,
1360 MBEDTLS_MODE_GCM,
1361 128,
1362 "ARIA-128-GCM",
1363 12,
1364 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1365 16,
1366 &gcm_aria_info
1367};
1368
1369static const mbedtls_cipher_info_t aria_192_gcm_info = {
1370 MBEDTLS_CIPHER_ARIA_192_GCM,
1371 MBEDTLS_MODE_GCM,
1372 192,
1373 "ARIA-192-GCM",
1374 12,
1375 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1376 16,
1377 &gcm_aria_info
1378};
1379
1380static const mbedtls_cipher_info_t aria_256_gcm_info = {
1381 MBEDTLS_CIPHER_ARIA_256_GCM,
1382 MBEDTLS_MODE_GCM,
1383 256,
1384 "ARIA-256-GCM",
1385 12,
1386 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1387 16,
1388 &gcm_aria_info
1389};
1390#endif /* MBEDTLS_GCM_C */
1391
1392#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001393static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1394 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001395{
Gilles Peskine449bd832023-01-11 14:50:10 +01001396 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1397 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001398}
1399
1400static const mbedtls_cipher_base_t ccm_aria_info = {
1401 MBEDTLS_CIPHER_ID_ARIA,
1402 NULL,
1403#if defined(MBEDTLS_CIPHER_MODE_CBC)
1404 NULL,
1405#endif
1406#if defined(MBEDTLS_CIPHER_MODE_CFB)
1407 NULL,
1408#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001409#if defined(MBEDTLS_CIPHER_MODE_OFB)
1410 NULL,
1411#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001412#if defined(MBEDTLS_CIPHER_MODE_CTR)
1413 NULL,
1414#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001415#if defined(MBEDTLS_CIPHER_MODE_XTS)
1416 NULL,
1417#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001418#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1419 NULL,
1420#endif
1421 ccm_aria_setkey_wrap,
1422 ccm_aria_setkey_wrap,
1423 ccm_ctx_alloc,
1424 ccm_ctx_free,
1425};
1426
1427static const mbedtls_cipher_info_t aria_128_ccm_info = {
1428 MBEDTLS_CIPHER_ARIA_128_CCM,
1429 MBEDTLS_MODE_CCM,
1430 128,
1431 "ARIA-128-CCM",
1432 12,
1433 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1434 16,
1435 &ccm_aria_info
1436};
1437
1438static const mbedtls_cipher_info_t aria_192_ccm_info = {
1439 MBEDTLS_CIPHER_ARIA_192_CCM,
1440 MBEDTLS_MODE_CCM,
1441 192,
1442 "ARIA-192-CCM",
1443 12,
1444 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1445 16,
1446 &ccm_aria_info
1447};
1448
1449static const mbedtls_cipher_info_t aria_256_ccm_info = {
1450 MBEDTLS_CIPHER_ARIA_256_CCM,
1451 MBEDTLS_MODE_CCM,
1452 256,
1453 "ARIA-256-CCM",
1454 12,
1455 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1456 16,
1457 &ccm_aria_info
1458};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001459
1460static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
1461 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
1462 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1463 128,
1464 "ARIA-128-CCM*-NO-TAG",
1465 12,
1466 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1467 16,
1468 &ccm_aria_info
1469};
1470
1471static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
1472 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
1473 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1474 192,
1475 "ARIA-192-CCM*-NO-TAG",
1476 12,
1477 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1478 16,
1479 &ccm_aria_info
1480};
1481
1482static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
1483 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
1484 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1485 256,
1486 "ARIA-256-CCM*-NO-TAG",
1487 12,
1488 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1489 16,
1490 &ccm_aria_info
1491};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001492#endif /* MBEDTLS_CCM_C */
1493
1494#endif /* MBEDTLS_ARIA_C */
1495
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001496#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001497
Gilles Peskine449bd832023-01-11 14:50:10 +01001498static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1499 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001500{
1501 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001502 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001503}
1504
Gilles Peskine449bd832023-01-11 14:50:10 +01001505static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1506 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001507{
1508 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001509 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001510}
1511
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001512#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001513static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1514 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001515{
Gilles Peskine449bd832023-01-11 14:50:10 +01001516 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1517 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001518}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001519#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001520
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001521#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001522static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1523 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001524{
Gilles Peskine449bd832023-01-11 14:50:10 +01001525 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1526 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001527}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001528#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001529
Gilles Peskine449bd832023-01-11 14:50:10 +01001530static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1531 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001532{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001533 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001534
Gilles Peskine449bd832023-01-11 14:50:10 +01001535 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001536}
1537
Gilles Peskine449bd832023-01-11 14:50:10 +01001538static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1539 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001540{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001541 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001542
Gilles Peskine449bd832023-01-11 14:50:10 +01001543 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001544}
1545
Gilles Peskine449bd832023-01-11 14:50:10 +01001546static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1547 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001548{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001549 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001550
Gilles Peskine449bd832023-01-11 14:50:10 +01001551 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001552}
1553
Gilles Peskine449bd832023-01-11 14:50:10 +01001554static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1555 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001556{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001557 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001558
Gilles Peskine449bd832023-01-11 14:50:10 +01001559 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001560}
1561
Gilles Peskine449bd832023-01-11 14:50:10 +01001562static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1563 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001564{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001565 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001566
Gilles Peskine449bd832023-01-11 14:50:10 +01001567 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001568}
1569
Gilles Peskine449bd832023-01-11 14:50:10 +01001570static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1571 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001572{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001573 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001574
Gilles Peskine449bd832023-01-11 14:50:10 +01001575 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001576}
1577
Gilles Peskine449bd832023-01-11 14:50:10 +01001578static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001579{
Gilles Peskine449bd832023-01-11 14:50:10 +01001580 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001581
Gilles Peskine449bd832023-01-11 14:50:10 +01001582 if (des == NULL) {
1583 return NULL;
1584 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001585
Gilles Peskine449bd832023-01-11 14:50:10 +01001586 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001587
Gilles Peskine449bd832023-01-11 14:50:10 +01001588 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001589}
1590
Gilles Peskine449bd832023-01-11 14:50:10 +01001591static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001592{
Gilles Peskine449bd832023-01-11 14:50:10 +01001593 mbedtls_des_free((mbedtls_des_context *) ctx);
1594 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001595}
1596
Gilles Peskine449bd832023-01-11 14:50:10 +01001597static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001598{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001599 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001600 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001601
Gilles Peskine449bd832023-01-11 14:50:10 +01001602 if (des3 == NULL) {
1603 return NULL;
1604 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001605
Gilles Peskine449bd832023-01-11 14:50:10 +01001606 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001607
Gilles Peskine449bd832023-01-11 14:50:10 +01001608 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001609}
1610
Gilles Peskine449bd832023-01-11 14:50:10 +01001611static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001612{
Gilles Peskine449bd832023-01-11 14:50:10 +01001613 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1614 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001615}
1616
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001617static const mbedtls_cipher_base_t des_info = {
1618 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001619 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001620#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001621 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001622#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001623#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001624 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001625#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001626#if defined(MBEDTLS_CIPHER_MODE_OFB)
1627 NULL,
1628#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001629#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001630 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001631#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001632#if defined(MBEDTLS_CIPHER_MODE_XTS)
1633 NULL,
1634#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001635#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001636 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001637#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001638 des_setkey_enc_wrap,
1639 des_setkey_dec_wrap,
1640 des_ctx_alloc,
1641 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001642};
1643
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001644static const mbedtls_cipher_info_t des_ecb_info = {
1645 MBEDTLS_CIPHER_DES_ECB,
1646 MBEDTLS_MODE_ECB,
1647 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001648 "DES-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001649 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001650 0,
1651 8,
1652 &des_info
1653};
1654
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001655#if defined(MBEDTLS_CIPHER_MODE_CBC)
1656static const mbedtls_cipher_info_t des_cbc_info = {
1657 MBEDTLS_CIPHER_DES_CBC,
1658 MBEDTLS_MODE_CBC,
1659 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker343a8702011-06-09 14:27:58 +00001660 "DES-CBC",
1661 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001662 0,
Paul Bakker343a8702011-06-09 14:27:58 +00001663 8,
1664 &des_info
1665};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001666#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001667
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001668static const mbedtls_cipher_base_t des_ede_info = {
1669 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001670 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001671#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001672 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001673#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001674#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001675 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001676#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001677#if defined(MBEDTLS_CIPHER_MODE_OFB)
1678 NULL,
1679#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001680#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001681 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001682#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001683#if defined(MBEDTLS_CIPHER_MODE_XTS)
1684 NULL,
1685#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001686#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001687 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001688#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001689 des3_set2key_enc_wrap,
1690 des3_set2key_dec_wrap,
1691 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001692 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001693};
1694
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001695static const mbedtls_cipher_info_t des_ede_ecb_info = {
1696 MBEDTLS_CIPHER_DES_EDE_ECB,
1697 MBEDTLS_MODE_ECB,
1698 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001699 "DES-EDE-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001700 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001701 0,
1702 8,
1703 &des_ede_info
1704};
1705
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001706#if defined(MBEDTLS_CIPHER_MODE_CBC)
1707static const mbedtls_cipher_info_t des_ede_cbc_info = {
1708 MBEDTLS_CIPHER_DES_EDE_CBC,
1709 MBEDTLS_MODE_CBC,
1710 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker343a8702011-06-09 14:27:58 +00001711 "DES-EDE-CBC",
Paul Bakker0e342352013-06-24 19:33:02 +02001712 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001713 0,
Paul Bakker0e342352013-06-24 19:33:02 +02001714 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001715 &des_ede_info
1716};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001717#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001718
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001719static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001720 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001721 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001722#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001723 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001724#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001725#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001726 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001727#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001728#if defined(MBEDTLS_CIPHER_MODE_OFB)
1729 NULL,
1730#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001731#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001732 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001733#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001734#if defined(MBEDTLS_CIPHER_MODE_XTS)
1735 NULL,
1736#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001737#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001738 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001739#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001740 des3_set3key_enc_wrap,
1741 des3_set3key_dec_wrap,
1742 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001743 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001744};
1745
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001746static const mbedtls_cipher_info_t des_ede3_ecb_info = {
1747 MBEDTLS_CIPHER_DES_EDE3_ECB,
1748 MBEDTLS_MODE_ECB,
1749 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001750 "DES-EDE3-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001751 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001752 0,
1753 8,
1754 &des_ede3_info
1755};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001756#if defined(MBEDTLS_CIPHER_MODE_CBC)
1757static const mbedtls_cipher_info_t des_ede3_cbc_info = {
1758 MBEDTLS_CIPHER_DES_EDE3_CBC,
1759 MBEDTLS_MODE_CBC,
1760 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker23986e52011-04-24 08:57:21 +00001761 "DES-EDE3-CBC",
1762 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001763 0,
Paul Bakker23986e52011-04-24 08:57:21 +00001764 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001765 &des_ede3_info
Paul Bakker8123e9d2011-01-06 15:37:30 +00001766};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001767#endif /* MBEDTLS_CIPHER_MODE_CBC */
1768#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001769
Daniel Kingbd920622016-05-15 19:56:20 -03001770#if defined(MBEDTLS_CHACHA20_C)
1771
Gilles Peskine449bd832023-01-11 14:50:10 +01001772static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1773 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001774{
Gilles Peskine449bd832023-01-11 14:50:10 +01001775 if (key_bitlen != 256U) {
1776 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1777 }
Daniel Kingbd920622016-05-15 19:56:20 -03001778
Gilles Peskine449bd832023-01-11 14:50:10 +01001779 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1780 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1781 }
Daniel Kingbd920622016-05-15 19:56:20 -03001782
Gilles Peskine449bd832023-01-11 14:50:10 +01001783 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001784}
1785
Gilles Peskine449bd832023-01-11 14:50:10 +01001786static int chacha20_stream_wrap(void *ctx, size_t length,
1787 const unsigned char *input,
1788 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001789{
Janos Follath24eed8d2019-11-22 13:21:35 +00001790 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001791
Gilles Peskine449bd832023-01-11 14:50:10 +01001792 ret = mbedtls_chacha20_update(ctx, length, input, output);
1793 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1794 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1795 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001796
Gilles Peskine449bd832023-01-11 14:50:10 +01001797 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001798}
1799
Gilles Peskine449bd832023-01-11 14:50:10 +01001800static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001801{
1802 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001803 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001804
Gilles Peskine449bd832023-01-11 14:50:10 +01001805 if (ctx == NULL) {
1806 return NULL;
1807 }
Daniel Kingbd920622016-05-15 19:56:20 -03001808
Gilles Peskine449bd832023-01-11 14:50:10 +01001809 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001810
Gilles Peskine449bd832023-01-11 14:50:10 +01001811 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001812}
1813
Gilles Peskine449bd832023-01-11 14:50:10 +01001814static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001815{
Gilles Peskine449bd832023-01-11 14:50:10 +01001816 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1817 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001818}
1819
1820static const mbedtls_cipher_base_t chacha20_base_info = {
1821 MBEDTLS_CIPHER_ID_CHACHA20,
1822 NULL,
1823#if defined(MBEDTLS_CIPHER_MODE_CBC)
1824 NULL,
1825#endif
1826#if defined(MBEDTLS_CIPHER_MODE_CFB)
1827 NULL,
1828#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001829#if defined(MBEDTLS_CIPHER_MODE_OFB)
1830 NULL,
1831#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001832#if defined(MBEDTLS_CIPHER_MODE_CTR)
1833 NULL,
1834#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001835#if defined(MBEDTLS_CIPHER_MODE_XTS)
1836 NULL,
1837#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001838#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001839 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001840#endif
1841 chacha20_setkey_wrap,
1842 chacha20_setkey_wrap,
1843 chacha20_ctx_alloc,
1844 chacha20_ctx_free
1845};
1846static const mbedtls_cipher_info_t chacha20_info = {
1847 MBEDTLS_CIPHER_CHACHA20,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001848 MBEDTLS_MODE_STREAM,
Daniel Kingbd920622016-05-15 19:56:20 -03001849 256,
1850 "CHACHA20",
1851 12,
1852 0,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001853 1,
Daniel Kingbd920622016-05-15 19:56:20 -03001854 &chacha20_base_info
1855};
1856#endif /* MBEDTLS_CHACHA20_C */
1857
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001858#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001859
Gilles Peskine449bd832023-01-11 14:50:10 +01001860static int chachapoly_setkey_wrap(void *ctx,
1861 const unsigned char *key,
1862 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001863{
Gilles Peskine449bd832023-01-11 14:50:10 +01001864 if (key_bitlen != 256U) {
1865 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1866 }
Daniel King8fe47012016-05-17 20:33:28 -03001867
Gilles Peskine449bd832023-01-11 14:50:10 +01001868 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1869 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1870 }
Daniel King8fe47012016-05-17 20:33:28 -03001871
Gilles Peskine449bd832023-01-11 14:50:10 +01001872 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001873}
1874
Gilles Peskine449bd832023-01-11 14:50:10 +01001875static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001876{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001877 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001878 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001879
Gilles Peskine449bd832023-01-11 14:50:10 +01001880 if (ctx == NULL) {
1881 return NULL;
1882 }
Daniel King8fe47012016-05-17 20:33:28 -03001883
Gilles Peskine449bd832023-01-11 14:50:10 +01001884 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001885
Gilles Peskine449bd832023-01-11 14:50:10 +01001886 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001887}
1888
Gilles Peskine449bd832023-01-11 14:50:10 +01001889static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001890{
Gilles Peskine449bd832023-01-11 14:50:10 +01001891 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1892 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001893}
1894
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001895static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001896 MBEDTLS_CIPHER_ID_CHACHA20,
1897 NULL,
1898#if defined(MBEDTLS_CIPHER_MODE_CBC)
1899 NULL,
1900#endif
1901#if defined(MBEDTLS_CIPHER_MODE_CFB)
1902 NULL,
1903#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001904#if defined(MBEDTLS_CIPHER_MODE_OFB)
1905 NULL,
1906#endif
Daniel King8fe47012016-05-17 20:33:28 -03001907#if defined(MBEDTLS_CIPHER_MODE_CTR)
1908 NULL,
1909#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001910#if defined(MBEDTLS_CIPHER_MODE_XTS)
1911 NULL,
1912#endif
Daniel King8fe47012016-05-17 20:33:28 -03001913#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1914 NULL,
1915#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001916 chachapoly_setkey_wrap,
1917 chachapoly_setkey_wrap,
1918 chachapoly_ctx_alloc,
1919 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001920};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001921static const mbedtls_cipher_info_t chachapoly_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001922 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Manuel Pégourié-Gonnardf57bf8b2018-06-18 11:14:09 +02001923 MBEDTLS_MODE_CHACHAPOLY,
Daniel King8fe47012016-05-17 20:33:28 -03001924 256,
1925 "CHACHA20-POLY1305",
1926 12,
1927 0,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001928 1,
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001929 &chachapoly_base_info
Daniel King8fe47012016-05-17 20:33:28 -03001930};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001931#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03001932
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001933#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01001934static int null_crypt_stream(void *ctx, size_t length,
1935 const unsigned char *input,
1936 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001937{
1938 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01001939 memmove(output, input, length);
1940 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001941}
1942
Gilles Peskine449bd832023-01-11 14:50:10 +01001943static int null_setkey(void *ctx, const unsigned char *key,
1944 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001945{
1946 ((void) ctx);
1947 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001948 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001949
Gilles Peskine449bd832023-01-11 14:50:10 +01001950 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001951}
1952
Gilles Peskine449bd832023-01-11 14:50:10 +01001953static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001954{
Gilles Peskine449bd832023-01-11 14:50:10 +01001955 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00001956}
1957
Gilles Peskine449bd832023-01-11 14:50:10 +01001958static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001959{
1960 ((void) ctx);
1961}
1962
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001963static const mbedtls_cipher_base_t null_base_info = {
1964 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001965 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001966#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001967 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001968#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001969#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001970 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001971#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001972#if defined(MBEDTLS_CIPHER_MODE_OFB)
1973 NULL,
1974#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001975#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001976 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001977#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001978#if defined(MBEDTLS_CIPHER_MODE_XTS)
1979 NULL,
1980#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001981#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001982 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001983#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001984 null_setkey,
1985 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001986 null_ctx_alloc,
1987 null_ctx_free
1988};
1989
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001990static const mbedtls_cipher_info_t null_cipher_info = {
1991 MBEDTLS_CIPHER_NULL,
1992 MBEDTLS_MODE_STREAM,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001993 0,
1994 "NULL",
Paul Bakker68884e32013-01-07 18:20:04 +01001995 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001996 0,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001997 1,
1998 &null_base_info
1999};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002000#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002001
Jack Lloydffdf2882019-03-07 17:00:32 -05002002#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002003static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002004{
Gilles Peskine449bd832023-01-11 14:50:10 +01002005 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002006
Gilles Peskine449bd832023-01-11 14:50:10 +01002007 if (ctx != NULL) {
2008 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2009 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002010
Gilles Peskine449bd832023-01-11 14:50:10 +01002011 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002012}
2013
Gilles Peskine449bd832023-01-11 14:50:10 +01002014static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002015{
Gilles Peskine449bd832023-01-11 14:50:10 +01002016 mbedtls_nist_kw_free(ctx);
2017 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002018}
2019
Gilles Peskine449bd832023-01-11 14:50:10 +01002020static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2021 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002022{
Gilles Peskine449bd832023-01-11 14:50:10 +01002023 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2024 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002025}
2026
Gilles Peskine449bd832023-01-11 14:50:10 +01002027static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2028 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002029{
Gilles Peskine449bd832023-01-11 14:50:10 +01002030 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2031 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002032}
2033
2034static const mbedtls_cipher_base_t kw_aes_info = {
2035 MBEDTLS_CIPHER_ID_AES,
2036 NULL,
2037#if defined(MBEDTLS_CIPHER_MODE_CBC)
2038 NULL,
2039#endif
2040#if defined(MBEDTLS_CIPHER_MODE_CFB)
2041 NULL,
2042#endif
2043#if defined(MBEDTLS_CIPHER_MODE_OFB)
2044 NULL,
2045#endif
2046#if defined(MBEDTLS_CIPHER_MODE_CTR)
2047 NULL,
2048#endif
2049#if defined(MBEDTLS_CIPHER_MODE_XTS)
2050 NULL,
2051#endif
2052#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2053 NULL,
2054#endif
2055 kw_aes_setkey_wrap,
2056 kw_aes_setkey_unwrap,
2057 kw_ctx_alloc,
2058 kw_ctx_free,
2059};
2060
2061static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
2062 MBEDTLS_CIPHER_AES_128_KW,
2063 MBEDTLS_MODE_KW,
2064 128,
2065 "AES-128-KW",
2066 0,
2067 0,
2068 16,
2069 &kw_aes_info
2070};
2071
2072static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
2073 MBEDTLS_CIPHER_AES_192_KW,
2074 MBEDTLS_MODE_KW,
2075 192,
2076 "AES-192-KW",
2077 0,
2078 0,
2079 16,
2080 &kw_aes_info
2081};
2082
2083static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
2084 MBEDTLS_CIPHER_AES_256_KW,
2085 MBEDTLS_MODE_KW,
2086 256,
2087 "AES-256-KW",
2088 0,
2089 0,
2090 16,
2091 &kw_aes_info
2092};
2093
2094static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
2095 MBEDTLS_CIPHER_AES_128_KWP,
2096 MBEDTLS_MODE_KWP,
2097 128,
2098 "AES-128-KWP",
2099 0,
2100 0,
2101 16,
2102 &kw_aes_info
2103};
2104
2105static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
2106 MBEDTLS_CIPHER_AES_192_KWP,
2107 MBEDTLS_MODE_KWP,
2108 192,
2109 "AES-192-KWP",
2110 0,
2111 0,
2112 16,
2113 &kw_aes_info
2114};
2115
2116static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
2117 MBEDTLS_CIPHER_AES_256_KWP,
2118 MBEDTLS_MODE_KWP,
2119 256,
2120 "AES-256-KWP",
2121 0,
2122 0,
2123 16,
2124 &kw_aes_info
2125};
2126#endif /* MBEDTLS_NIST_KW_C */
2127
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002128const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002129{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002130#if defined(MBEDTLS_AES_C)
2131 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2132 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2133 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2134#if defined(MBEDTLS_CIPHER_MODE_CBC)
2135 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2136 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2137 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002138#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002139#if defined(MBEDTLS_CIPHER_MODE_CFB)
2140 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2141 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2142 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002143#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002144#if defined(MBEDTLS_CIPHER_MODE_OFB)
2145 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2146 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2147 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2148#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002149#if defined(MBEDTLS_CIPHER_MODE_CTR)
2150 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2151 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2152 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002153#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002154#if defined(MBEDTLS_CIPHER_MODE_XTS)
2155 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2156 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2157#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002158#if defined(MBEDTLS_GCM_C)
2159 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2160 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2161 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002162#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002163#if defined(MBEDTLS_CCM_C)
2164 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2165 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2166 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002167 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
2168 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2169 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002170#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002171#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002172
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002173#if defined(MBEDTLS_CAMELLIA_C)
2174 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2175 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2176 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2177#if defined(MBEDTLS_CIPHER_MODE_CBC)
2178 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2179 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2180 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002181#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002182#if defined(MBEDTLS_CIPHER_MODE_CFB)
2183 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2184 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2185 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002186#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002187#if defined(MBEDTLS_CIPHER_MODE_CTR)
2188 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2189 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2190 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002191#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002192#if defined(MBEDTLS_GCM_C)
2193 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2194 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2195 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002196#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002197#if defined(MBEDTLS_CCM_C)
2198 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2199 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2200 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002201 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2202 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2203 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002204#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002205#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002206
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002207#if defined(MBEDTLS_ARIA_C)
2208 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2209 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2210 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2211#if defined(MBEDTLS_CIPHER_MODE_CBC)
2212 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2213 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2214 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2215#endif
2216#if defined(MBEDTLS_CIPHER_MODE_CFB)
2217 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2218 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2219 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2220#endif
2221#if defined(MBEDTLS_CIPHER_MODE_CTR)
2222 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2223 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2224 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2225#endif
2226#if defined(MBEDTLS_GCM_C)
2227 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2228 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2229 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2230#endif
2231#if defined(MBEDTLS_CCM_C)
2232 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2233 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2234 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002235 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2236 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2237 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002238#endif
2239#endif /* MBEDTLS_ARIA_C */
2240
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002241#if defined(MBEDTLS_DES_C)
2242 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2243 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2244 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2245#if defined(MBEDTLS_CIPHER_MODE_CBC)
2246 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2247 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2248 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002249#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002250#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002251
Daniel Kingbd920622016-05-15 19:56:20 -03002252#if defined(MBEDTLS_CHACHA20_C)
2253 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2254#endif
2255
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002256#if defined(MBEDTLS_CHACHAPOLY_C)
2257 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002258#endif
2259
Jack Lloydffdf2882019-03-07 17:00:32 -05002260#if defined(MBEDTLS_NIST_KW_C)
2261 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2262 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2263 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2264 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2265 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2266 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2267#endif
2268
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002269#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2270 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2271#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002272
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002273 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002274};
2275
Gilles Peskine449bd832023-01-11 14:50:10 +01002276#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2277 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002278int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002279
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002280#endif /* MBEDTLS_CIPHER_C */