blob: 34877be8f60e1fcb943416539518f325372d406c [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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100244 "AES-128-ECB",
245 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200246 MBEDTLS_CIPHER_AES_128_ECB,
247 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200248 128,
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300249 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200250 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100251 16
Paul Bakker5e0efa72013-09-08 23:04:04 +0200252};
253
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200254static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100255 "AES-192-ECB",
256 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200257 MBEDTLS_CIPHER_AES_192_ECB,
258 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200259 192,
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300260 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200261 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100262 16
Paul Bakker5e0efa72013-09-08 23:04:04 +0200263};
264
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200265static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100266 "AES-256-ECB",
267 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200268 MBEDTLS_CIPHER_AES_256_ECB,
269 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200270 256,
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300271 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200272 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100273 16
Paul Bakker5e0efa72013-09-08 23:04:04 +0200274};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100278 "AES-128-CBC",
279 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200280 MBEDTLS_CIPHER_AES_128_CBC,
281 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000282 128,
Paul Bakker23986e52011-04-24 08:57:21 +0000283 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200284 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100285 16
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100289 "AES-192-CBC",
290 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200291 MBEDTLS_CIPHER_AES_192_CBC,
292 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000293 192,
Paul Bakker23986e52011-04-24 08:57:21 +0000294 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200295 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100296 16
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100300 "AES-256-CBC",
301 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200302 MBEDTLS_CIPHER_AES_256_CBC,
303 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000304 256,
Paul Bakker23986e52011-04-24 08:57:21 +0000305 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200306 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100307 16
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100313 "AES-128-CFB128",
314 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200315 MBEDTLS_CIPHER_AES_128_CFB128,
316 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000317 128,
Paul Bakker343a8702011-06-09 14:27:58 +0000318 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200319 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100320 16
Paul Bakker343a8702011-06-09 14:27:58 +0000321};
322
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200323static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100324 "AES-192-CFB128",
325 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200326 MBEDTLS_CIPHER_AES_192_CFB128,
327 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000328 192,
Paul Bakker343a8702011-06-09 14:27:58 +0000329 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200330 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100331 16
Paul Bakker343a8702011-06-09 14:27:58 +0000332};
333
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200334static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100335 "AES-256-CFB128",
336 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200337 MBEDTLS_CIPHER_AES_256_CFB128,
338 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000339 256,
Paul Bakker343a8702011-06-09 14:27:58 +0000340 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200341 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100342 16
Paul Bakker343a8702011-06-09 14:27:58 +0000343};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100348 "AES-128-OFB",
349 &aes_info,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100350 MBEDTLS_CIPHER_AES_128_OFB,
351 MBEDTLS_MODE_OFB,
352 128,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100353 16,
354 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100355 16
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100356};
357
358static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100359 "AES-192-OFB",
360 &aes_info,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100361 MBEDTLS_CIPHER_AES_192_OFB,
362 MBEDTLS_MODE_OFB,
363 192,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100364 16,
365 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100366 16
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100367};
368
369static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100370 "AES-256-OFB",
371 &aes_info,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100372 MBEDTLS_CIPHER_AES_256_OFB,
373 MBEDTLS_MODE_OFB,
374 256,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100375 16,
376 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100377 16
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100378};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100383 "AES-128-CTR",
384 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200385 MBEDTLS_CIPHER_AES_128_CTR,
386 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000387 128,
Paul Bakker343a8702011-06-09 14:27:58 +0000388 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200389 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100390 16
Paul Bakker343a8702011-06-09 14:27:58 +0000391};
392
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200393static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100394 "AES-192-CTR",
395 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200396 MBEDTLS_CIPHER_AES_192_CTR,
397 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000398 192,
Paul Bakker343a8702011-06-09 14:27:58 +0000399 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200400 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100401 16
Paul Bakker343a8702011-06-09 14:27:58 +0000402};
403
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200404static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100405 "AES-256-CTR",
406 &aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200407 MBEDTLS_CIPHER_AES_256_CTR,
408 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000409 256,
Paul Bakker343a8702011-06-09 14:27:58 +0000410 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200411 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100412 16
Paul Bakker343a8702011-06-09 14:27:58 +0000413};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100482 "AES-128-XTS",
483 &xts_aes_info,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100484 MBEDTLS_CIPHER_AES_128_XTS,
485 MBEDTLS_MODE_XTS,
486 256,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100487 16,
488 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100489 16
Jaeden Ameroc6539902018-04-30 17:17:41 +0100490};
491
492static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100493 "AES-256-XTS",
494 &xts_aes_info,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100495 MBEDTLS_CIPHER_AES_256_XTS,
496 MBEDTLS_MODE_XTS,
497 512,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100498 16,
499 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100500 16
Jaeden Ameroc6539902018-04-30 17:17:41 +0100501};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100540 "AES-128-GCM",
541 &gcm_aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200542 MBEDTLS_CIPHER_AES_128_GCM,
543 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100544 128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200545 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200546 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100547 16
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100551 "AES-192-GCM",
552 &gcm_aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200553 MBEDTLS_CIPHER_AES_192_GCM,
554 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200555 192,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200556 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200557 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100558 16
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200559};
560
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200561static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100562 "AES-256-GCM",
563 &gcm_aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200564 MBEDTLS_CIPHER_AES_256_GCM,
565 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100566 256,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200567 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200568 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100569 16
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100609 "AES-128-CCM",
610 &ccm_aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200611 MBEDTLS_CIPHER_AES_128_CCM,
612 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200613 128,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200614 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200615 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100616 16
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200617};
618
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200619static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100620 "AES-192-CCM",
621 &ccm_aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200622 MBEDTLS_CIPHER_AES_192_CCM,
623 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200624 192,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200625 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200626 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100627 16
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200628};
629
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200630static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100631 "AES-256-CCM",
632 &ccm_aes_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200633 MBEDTLS_CIPHER_AES_256_CCM,
634 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200635 256,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200636 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200637 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100638 16
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200639};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200640
641static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100642 "AES-128-CCM*-NO-TAG",
643 &ccm_aes_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200644 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
645 MBEDTLS_MODE_CCM_STAR_NO_TAG,
646 128,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200647 12,
648 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100649 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200650};
651
652static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100653 "AES-192-CCM*-NO-TAG",
654 &ccm_aes_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200655 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
656 MBEDTLS_MODE_CCM_STAR_NO_TAG,
657 192,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200658 12,
659 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100660 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200661};
662
663static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100664 "AES-256-CCM*-NO-TAG",
665 &ccm_aes_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200666 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
667 MBEDTLS_MODE_CCM_STAR_NO_TAG,
668 256,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200669 12,
670 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100671 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200672};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100776 "CAMELLIA-128-ECB",
777 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200778 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
779 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200780 128,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100781 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200782 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100783 16
Paul Bakker5e0efa72013-09-08 23:04:04 +0200784};
785
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200786static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100787 "CAMELLIA-192-ECB",
788 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200789 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
790 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200791 192,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100792 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200793 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100794 16
Paul Bakker5e0efa72013-09-08 23:04:04 +0200795};
796
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200797static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100798 "CAMELLIA-256-ECB",
799 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200800 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
801 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200802 256,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100803 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200804 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100805 16
Paul Bakker5e0efa72013-09-08 23:04:04 +0200806};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100810 "CAMELLIA-128-CBC",
811 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200812 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
813 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000814 128,
Paul Bakker23986e52011-04-24 08:57:21 +0000815 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200816 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100817 16
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100821 "CAMELLIA-192-CBC",
822 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200823 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
824 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000825 192,
Paul Bakker23986e52011-04-24 08:57:21 +0000826 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200827 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100828 16
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100832 "CAMELLIA-256-CBC",
833 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200834 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
835 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000836 256,
Paul Bakker23986e52011-04-24 08:57:21 +0000837 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200838 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100839 16
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100845 "CAMELLIA-128-CFB128",
846 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200847 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
848 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000849 128,
Paul Bakker343a8702011-06-09 14:27:58 +0000850 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200851 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100852 16
Paul Bakker343a8702011-06-09 14:27:58 +0000853};
854
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200855static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100856 "CAMELLIA-192-CFB128",
857 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200858 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
859 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000860 192,
Paul Bakker343a8702011-06-09 14:27:58 +0000861 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200862 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100863 16
Paul Bakker343a8702011-06-09 14:27:58 +0000864};
865
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200866static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100867 "CAMELLIA-256-CFB128",
868 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200869 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
870 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000871 256,
Paul Bakker343a8702011-06-09 14:27:58 +0000872 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200873 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100874 16
Paul Bakker343a8702011-06-09 14:27:58 +0000875};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100880 "CAMELLIA-128-CTR",
881 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200882 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
883 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000884 128,
Paul Bakker343a8702011-06-09 14:27:58 +0000885 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200886 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100887 16
Paul Bakker343a8702011-06-09 14:27:58 +0000888};
889
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200890static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100891 "CAMELLIA-192-CTR",
892 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200893 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
894 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000895 192,
Paul Bakker343a8702011-06-09 14:27:58 +0000896 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200897 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100898 16
Paul Bakker343a8702011-06-09 14:27:58 +0000899};
900
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200901static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100902 "CAMELLIA-256-CTR",
903 &camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200904 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
905 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000906 256,
Paul Bakker343a8702011-06-09 14:27:58 +0000907 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200908 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100909 16
Paul Bakker343a8702011-06-09 14:27:58 +0000910};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100949 "CAMELLIA-128-GCM",
950 &gcm_camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200951 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
952 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200953 128,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200954 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200955 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100956 16
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200957};
958
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200959static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100960 "CAMELLIA-192-GCM",
961 &gcm_camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200962 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
963 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200964 192,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200965 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200966 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100967 16
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200968};
969
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200970static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100971 "CAMELLIA-256-GCM",
972 &gcm_camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200973 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
974 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200975 256,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200976 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200977 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +0100978 16
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200979};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001018 "CAMELLIA-128-CCM",
1019 &ccm_camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001020 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
1021 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001022 128,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001023 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001024 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001025 16
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001026};
1027
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001028static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001029 "CAMELLIA-192-CCM",
1030 &ccm_camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001031 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
1032 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001033 192,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001034 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001035 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001036 16
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001037};
1038
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001039static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001040 "CAMELLIA-256-CCM",
1041 &ccm_camellia_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001042 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
1043 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001044 256,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001045 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001046 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001047 16
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001048};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001049
1050static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001051 "CAMELLIA-128-CCM*-NO-TAG",
1052 &ccm_camellia_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001053 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
1054 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1055 128,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001056 12,
1057 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001058 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001059};
1060
1061static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001062 "CAMELLIA-192-CCM*-NO-TAG",
1063 &ccm_camellia_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001064 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
1065 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1066 192,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001067 12,
1068 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001069 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001070};
1071
1072static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001073 "CAMELLIA-256-CCM*-NO-TAG",
1074 &ccm_camellia_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001075 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
1076 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1077 256,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001078 12,
1079 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001080 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001081};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001186 "ARIA-128-ECB",
1187 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001188 MBEDTLS_CIPHER_ARIA_128_ECB,
1189 MBEDTLS_MODE_ECB,
1190 128,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001191 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001192 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001193 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001194};
1195
1196static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001197 "ARIA-192-ECB",
1198 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001199 MBEDTLS_CIPHER_ARIA_192_ECB,
1200 MBEDTLS_MODE_ECB,
1201 192,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001202 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001203 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001204 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001205};
1206
1207static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001208 "ARIA-256-ECB",
1209 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001210 MBEDTLS_CIPHER_ARIA_256_ECB,
1211 MBEDTLS_MODE_ECB,
1212 256,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001213 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001214 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001215 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001216};
1217
1218#if defined(MBEDTLS_CIPHER_MODE_CBC)
1219static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001220 "ARIA-128-CBC",
1221 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001222 MBEDTLS_CIPHER_ARIA_128_CBC,
1223 MBEDTLS_MODE_CBC,
1224 128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001225 16,
1226 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001227 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001228};
1229
1230static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001231 "ARIA-192-CBC",
1232 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001233 MBEDTLS_CIPHER_ARIA_192_CBC,
1234 MBEDTLS_MODE_CBC,
1235 192,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001236 16,
1237 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001238 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001239};
1240
1241static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001242 "ARIA-256-CBC",
1243 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001244 MBEDTLS_CIPHER_ARIA_256_CBC,
1245 MBEDTLS_MODE_CBC,
1246 256,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001247 16,
1248 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001249 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001250};
1251#endif /* MBEDTLS_CIPHER_MODE_CBC */
1252
1253#if defined(MBEDTLS_CIPHER_MODE_CFB)
1254static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001255 "ARIA-128-CFB128",
1256 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001257 MBEDTLS_CIPHER_ARIA_128_CFB128,
1258 MBEDTLS_MODE_CFB,
1259 128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001260 16,
1261 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001262 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001263};
1264
1265static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001266 "ARIA-192-CFB128",
1267 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001268 MBEDTLS_CIPHER_ARIA_192_CFB128,
1269 MBEDTLS_MODE_CFB,
1270 192,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001271 16,
1272 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001273 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001274};
1275
1276static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001277 "ARIA-256-CFB128",
1278 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001279 MBEDTLS_CIPHER_ARIA_256_CFB128,
1280 MBEDTLS_MODE_CFB,
1281 256,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001282 16,
1283 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001284 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001285};
1286#endif /* MBEDTLS_CIPHER_MODE_CFB */
1287
1288#if defined(MBEDTLS_CIPHER_MODE_CTR)
1289static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001290 "ARIA-128-CTR",
1291 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001292 MBEDTLS_CIPHER_ARIA_128_CTR,
1293 MBEDTLS_MODE_CTR,
1294 128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001295 16,
1296 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001297 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001298};
1299
1300static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001301 "ARIA-192-CTR",
1302 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001303 MBEDTLS_CIPHER_ARIA_192_CTR,
1304 MBEDTLS_MODE_CTR,
1305 192,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001306 16,
1307 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001308 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001309};
1310
1311static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001312 "ARIA-256-CTR",
1313 &aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001314 MBEDTLS_CIPHER_ARIA_256_CTR,
1315 MBEDTLS_MODE_CTR,
1316 256,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001317 16,
1318 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001319 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001320};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001359 "ARIA-128-GCM",
1360 &gcm_aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001361 MBEDTLS_CIPHER_ARIA_128_GCM,
1362 MBEDTLS_MODE_GCM,
1363 128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001364 12,
1365 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001366 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001367};
1368
1369static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001370 "ARIA-192-GCM",
1371 &gcm_aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001372 MBEDTLS_CIPHER_ARIA_192_GCM,
1373 MBEDTLS_MODE_GCM,
1374 192,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001375 12,
1376 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001377 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001378};
1379
1380static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001381 "ARIA-256-GCM",
1382 &gcm_aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001383 MBEDTLS_CIPHER_ARIA_256_GCM,
1384 MBEDTLS_MODE_GCM,
1385 256,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001386 12,
1387 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001388 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001389};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001428 "ARIA-128-CCM",
1429 &ccm_aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001430 MBEDTLS_CIPHER_ARIA_128_CCM,
1431 MBEDTLS_MODE_CCM,
1432 128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001433 12,
1434 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001435 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001436};
1437
1438static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001439 "ARIA-192-CCM",
1440 &ccm_aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001441 MBEDTLS_CIPHER_ARIA_192_CCM,
1442 MBEDTLS_MODE_CCM,
1443 192,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001444 12,
1445 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001446 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001447};
1448
1449static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001450 "ARIA-256-CCM",
1451 &ccm_aria_info,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001452 MBEDTLS_CIPHER_ARIA_256_CCM,
1453 MBEDTLS_MODE_CCM,
1454 256,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001455 12,
1456 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001457 16
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001458};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001459
1460static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001461 "ARIA-128-CCM*-NO-TAG",
1462 &ccm_aria_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001463 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
1464 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1465 128,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001466 12,
1467 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001468 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001469};
1470
1471static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001472 "ARIA-192-CCM*-NO-TAG",
1473 &ccm_aria_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001474 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
1475 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1476 192,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001477 12,
1478 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001479 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001480};
1481
1482static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001483 "ARIA-256-CCM*-NO-TAG",
1484 &ccm_aria_info,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001485 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
1486 MBEDTLS_MODE_CCM_STAR_NO_TAG,
1487 256,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001488 12,
1489 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001490 16
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001491};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001645 "DES-ECB",
1646 &des_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001647 MBEDTLS_CIPHER_DES_ECB,
1648 MBEDTLS_MODE_ECB,
1649 MBEDTLS_KEY_LENGTH_DES,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001650 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001651 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001652 8
Paul Bakker5e0efa72013-09-08 23:04:04 +02001653};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001657 "DES-CBC",
1658 &des_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001659 MBEDTLS_CIPHER_DES_CBC,
1660 MBEDTLS_MODE_CBC,
1661 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker343a8702011-06-09 14:27:58 +00001662 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001663 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001664 8
Paul Bakker343a8702011-06-09 14:27:58 +00001665};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001696 "DES-EDE-ECB",
1697 &des_ede_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001698 MBEDTLS_CIPHER_DES_EDE_ECB,
1699 MBEDTLS_MODE_ECB,
1700 MBEDTLS_KEY_LENGTH_DES_EDE,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001701 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001702 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001703 8
Paul Bakker5e0efa72013-09-08 23:04:04 +02001704};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001708 "DES-EDE-CBC",
1709 &des_ede_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001710 MBEDTLS_CIPHER_DES_EDE_CBC,
1711 MBEDTLS_MODE_CBC,
1712 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker0e342352013-06-24 19:33:02 +02001713 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001714 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001715 8
Paul Bakker343a8702011-06-09 14:27:58 +00001716};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001747 "DES-EDE3-ECB",
1748 &des_ede3_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001749 MBEDTLS_CIPHER_DES_EDE3_ECB,
1750 MBEDTLS_MODE_ECB,
1751 MBEDTLS_KEY_LENGTH_DES_EDE3,
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001752 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001753 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001754 8
Paul Bakker5e0efa72013-09-08 23:04:04 +02001755};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001758 "DES-EDE3-CBC",
1759 &des_ede3_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001760 MBEDTLS_CIPHER_DES_EDE3_CBC,
1761 MBEDTLS_MODE_CBC,
1762 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker23986e52011-04-24 08:57:21 +00001763 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001764 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001765 8
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001847 "CHACHA20",
1848 &chacha20_base_info,
Daniel Kingbd920622016-05-15 19:56:20 -03001849 MBEDTLS_CIPHER_CHACHA20,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001850 MBEDTLS_MODE_STREAM,
Daniel Kingbd920622016-05-15 19:56:20 -03001851 256,
Daniel Kingbd920622016-05-15 19:56:20 -03001852 12,
1853 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001854 1
Daniel Kingbd920622016-05-15 19:56:20 -03001855};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001922 "CHACHA20-POLY1305",
1923 &chachapoly_base_info,
Daniel King8fe47012016-05-17 20:33:28 -03001924 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Manuel Pégourié-Gonnardf57bf8b2018-06-18 11:14:09 +02001925 MBEDTLS_MODE_CHACHAPOLY,
Daniel King8fe47012016-05-17 20:33:28 -03001926 256,
Daniel King8fe47012016-05-17 20:33:28 -03001927 12,
1928 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001929 1
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001991 "NULL",
1992 &null_base_info,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001993 MBEDTLS_CIPHER_NULL,
1994 MBEDTLS_MODE_STREAM,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001995 0,
Paul Bakker68884e32013-01-07 18:20:04 +01001996 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001997 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01001998 1
Paul Bakkerfab5c822012-02-06 16:45:10 +00001999};
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 = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002062 "AES-128-KW",
2063 &kw_aes_info,
Jack Lloydffdf2882019-03-07 17:00:32 -05002064 MBEDTLS_CIPHER_AES_128_KW,
2065 MBEDTLS_MODE_KW,
2066 128,
Jack Lloydffdf2882019-03-07 17:00:32 -05002067 0,
2068 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01002069 16
Jack Lloydffdf2882019-03-07 17:00:32 -05002070};
2071
2072static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002073 "AES-192-KW",
2074 &kw_aes_info,
Jack Lloydffdf2882019-03-07 17:00:32 -05002075 MBEDTLS_CIPHER_AES_192_KW,
2076 MBEDTLS_MODE_KW,
2077 192,
Jack Lloydffdf2882019-03-07 17:00:32 -05002078 0,
2079 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01002080 16
Jack Lloydffdf2882019-03-07 17:00:32 -05002081};
2082
2083static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002084 "AES-256-KW",
2085 &kw_aes_info,
Jack Lloydffdf2882019-03-07 17:00:32 -05002086 MBEDTLS_CIPHER_AES_256_KW,
2087 MBEDTLS_MODE_KW,
2088 256,
Jack Lloydffdf2882019-03-07 17:00:32 -05002089 0,
2090 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01002091 16
Jack Lloydffdf2882019-03-07 17:00:32 -05002092};
2093
2094static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002095 "AES-128-KWP",
2096 &kw_aes_info,
Jack Lloydffdf2882019-03-07 17:00:32 -05002097 MBEDTLS_CIPHER_AES_128_KWP,
2098 MBEDTLS_MODE_KWP,
2099 128,
Jack Lloydffdf2882019-03-07 17:00:32 -05002100 0,
2101 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01002102 16
Jack Lloydffdf2882019-03-07 17:00:32 -05002103};
2104
2105static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002106 "AES-192-KWP",
2107 &kw_aes_info,
Jack Lloydffdf2882019-03-07 17:00:32 -05002108 MBEDTLS_CIPHER_AES_192_KWP,
2109 MBEDTLS_MODE_KWP,
2110 192,
Jack Lloydffdf2882019-03-07 17:00:32 -05002111 0,
2112 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01002113 16
Jack Lloydffdf2882019-03-07 17:00:32 -05002114};
2115
2116static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002117 "AES-256-KWP",
2118 &kw_aes_info,
Jack Lloydffdf2882019-03-07 17:00:32 -05002119 MBEDTLS_CIPHER_AES_256_KWP,
2120 MBEDTLS_MODE_KWP,
2121 256,
Jack Lloydffdf2882019-03-07 17:00:32 -05002122 0,
2123 0,
Dave Rodgman3319ae92023-06-24 10:55:04 +01002124 16
Jack Lloydffdf2882019-03-07 17:00:32 -05002125};
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 */