blob: 737cf9776b954a2a8c55a56085d0a31b3c39eafe [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
Manuel Pégourié-Gonnard50518f42015-05-26 11:04:15 +020028#include "mbedtls/cipher_internal.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_ARC4_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000040#include "mbedtls/arc4.h"
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +020041#endif
42
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020043#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000044#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000045#endif
46
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000047#if defined(MBEDTLS_ARIA_C)
48#include "mbedtls/aria.h"
49#endif
50
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020051#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000052#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000053#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000054
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_BLOWFISH_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000056#include "mbedtls/blowfish.h"
Paul Bakker6132d0a2012-07-04 17:10:40 +000057#endif
58
Daniel Kingbd920622016-05-15 19:56:20 -030059#if defined(MBEDTLS_CHACHA20_C)
60#include "mbedtls/chacha20.h"
61#endif
62
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020063#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000064#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020065#endif
66
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000068#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020069#endif
70
Jack Lloydffdf2882019-03-07 17:00:32 -050071#if defined(MBEDTLS_NIST_KW_C)
72#include "mbedtls/nist_kw.h"
73#endif
74
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020075#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000076#include <string.h>
77#endif
78
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000079#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020080
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020081#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020082/* shared by all GCM ciphers */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010083static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020084{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010085 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020086
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010087 if (ctx != NULL) {
88 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
89 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020090
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010091 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020092}
93
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010094static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020095{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010096 mbedtls_gcm_free(ctx);
97 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020098}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020099#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200100
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200101#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200102/* shared by all CCM ciphers */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100103static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200104{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100105 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200106
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100107 if (ctx != NULL) {
108 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
109 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200110
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100111 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200112}
113
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100114static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200115{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100116 mbedtls_ccm_free(ctx);
117 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200118}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200119#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200120
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200121#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000122
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100123static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
124 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200125{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100126 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200127}
128
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200129#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100130static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
131 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000132{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100133 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
134 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000135}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200136#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000137
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200138#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100139static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
140 size_t length, size_t *iv_off, unsigned char *iv,
141 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000142{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100143 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
144 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000145}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200146#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000147
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100148#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100149static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
150 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100151{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100152 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
153 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100154}
155#endif /* MBEDTLS_CIPHER_MODE_OFB */
156
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200157#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100158static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
159 unsigned char *nonce_counter, unsigned char *stream_block,
160 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000161{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100162 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
163 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000164}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200165#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000166
Jaeden Ameroc6539902018-04-30 17:17:41 +0100167#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100168static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
169 size_t length,
170 const unsigned char data_unit[16],
171 const unsigned char *input,
172 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100173{
174 mbedtls_aes_xts_context *xts_ctx = ctx;
175 int mode;
176
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100177 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100178 case MBEDTLS_ENCRYPT:
179 mode = MBEDTLS_AES_ENCRYPT;
180 break;
181 case MBEDTLS_DECRYPT:
182 mode = MBEDTLS_AES_DECRYPT;
183 break;
184 default:
185 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
186 }
187
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100188 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
189 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100190}
191#endif /* MBEDTLS_CIPHER_MODE_XTS */
192
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100193static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
194 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000195{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100196 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000197}
198
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100199static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
200 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000201{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100202 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000203}
204
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100205static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000206{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100207 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200208
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100209 if (aes == NULL) {
210 return NULL;
211 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200212
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100213 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200214
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100215 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000216}
217
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100218static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000219{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100220 mbedtls_aes_free((mbedtls_aes_context *) ctx);
221 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000222}
223
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200224static const mbedtls_cipher_base_t aes_info = {
225 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200226 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200227#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000228 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100229#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200230#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000231 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100232#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100233#if defined(MBEDTLS_CIPHER_MODE_OFB)
234 aes_crypt_ofb_wrap,
235#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200236#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000237 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100238#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100239#if defined(MBEDTLS_CIPHER_MODE_XTS)
240 NULL,
241#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200242#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200243 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100244#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000245 aes_setkey_enc_wrap,
246 aes_setkey_dec_wrap,
247 aes_ctx_alloc,
248 aes_ctx_free
249};
250
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200251static const mbedtls_cipher_info_t aes_128_ecb_info = {
252 MBEDTLS_CIPHER_AES_128_ECB,
253 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200254 128,
255 "AES-128-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300256 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200257 0,
258 16,
259 &aes_info
260};
261
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200262static const mbedtls_cipher_info_t aes_192_ecb_info = {
263 MBEDTLS_CIPHER_AES_192_ECB,
264 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200265 192,
266 "AES-192-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300267 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200268 0,
269 16,
270 &aes_info
271};
272
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200273static const mbedtls_cipher_info_t aes_256_ecb_info = {
274 MBEDTLS_CIPHER_AES_256_ECB,
275 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200276 256,
277 "AES-256-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300278 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200279 0,
280 16,
281 &aes_info
282};
283
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200284#if defined(MBEDTLS_CIPHER_MODE_CBC)
285static const mbedtls_cipher_info_t aes_128_cbc_info = {
286 MBEDTLS_CIPHER_AES_128_CBC,
287 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000288 128,
289 "AES-128-CBC",
290 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200291 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000292 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000293 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000294};
295
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200296static const mbedtls_cipher_info_t aes_192_cbc_info = {
297 MBEDTLS_CIPHER_AES_192_CBC,
298 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000299 192,
300 "AES-192-CBC",
301 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200302 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000303 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000304 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000305};
306
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200307static const mbedtls_cipher_info_t aes_256_cbc_info = {
308 MBEDTLS_CIPHER_AES_256_CBC,
309 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000310 256,
311 "AES-256-CBC",
312 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200313 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000314 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000315 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000316};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200317#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000318
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200319#if defined(MBEDTLS_CIPHER_MODE_CFB)
320static const mbedtls_cipher_info_t aes_128_cfb128_info = {
321 MBEDTLS_CIPHER_AES_128_CFB128,
322 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000323 128,
324 "AES-128-CFB128",
325 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200326 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000327 16,
328 &aes_info
329};
330
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200331static const mbedtls_cipher_info_t aes_192_cfb128_info = {
332 MBEDTLS_CIPHER_AES_192_CFB128,
333 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000334 192,
335 "AES-192-CFB128",
336 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200337 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000338 16,
339 &aes_info
340};
341
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200342static const mbedtls_cipher_info_t aes_256_cfb128_info = {
343 MBEDTLS_CIPHER_AES_256_CFB128,
344 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000345 256,
346 "AES-256-CFB128",
347 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200348 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000349 16,
350 &aes_info
351};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200352#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000353
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100354#if defined(MBEDTLS_CIPHER_MODE_OFB)
355static const mbedtls_cipher_info_t aes_128_ofb_info = {
356 MBEDTLS_CIPHER_AES_128_OFB,
357 MBEDTLS_MODE_OFB,
358 128,
359 "AES-128-OFB",
360 16,
361 0,
362 16,
363 &aes_info
364};
365
366static const mbedtls_cipher_info_t aes_192_ofb_info = {
367 MBEDTLS_CIPHER_AES_192_OFB,
368 MBEDTLS_MODE_OFB,
369 192,
370 "AES-192-OFB",
371 16,
372 0,
373 16,
374 &aes_info
375};
376
377static const mbedtls_cipher_info_t aes_256_ofb_info = {
378 MBEDTLS_CIPHER_AES_256_OFB,
379 MBEDTLS_MODE_OFB,
380 256,
381 "AES-256-OFB",
382 16,
383 0,
384 16,
385 &aes_info
386};
387#endif /* MBEDTLS_CIPHER_MODE_OFB */
388
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200389#if defined(MBEDTLS_CIPHER_MODE_CTR)
390static const mbedtls_cipher_info_t aes_128_ctr_info = {
391 MBEDTLS_CIPHER_AES_128_CTR,
392 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000393 128,
394 "AES-128-CTR",
395 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200396 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000397 16,
398 &aes_info
399};
400
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200401static const mbedtls_cipher_info_t aes_192_ctr_info = {
402 MBEDTLS_CIPHER_AES_192_CTR,
403 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000404 192,
405 "AES-192-CTR",
406 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200407 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000408 16,
409 &aes_info
410};
411
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200412static const mbedtls_cipher_info_t aes_256_ctr_info = {
413 MBEDTLS_CIPHER_AES_256_CTR,
414 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000415 256,
416 "AES-256-CTR",
417 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200418 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000419 16,
420 &aes_info
421};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200422#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000423
Jaeden Ameroc6539902018-04-30 17:17:41 +0100424#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100425static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
426 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100427{
428 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100429 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100430}
431
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100432static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
433 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100434{
435 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100436 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100437}
438
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100439static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100440{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100441 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100442
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100443 if (xts_ctx != NULL) {
444 mbedtls_aes_xts_init(xts_ctx);
445 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100446
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100447 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100448}
449
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100450static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100451{
452 mbedtls_aes_xts_context *xts_ctx = ctx;
453
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100454 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100455 return;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100456 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100457
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100458 mbedtls_aes_xts_free(xts_ctx);
459 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100460}
461
462static const mbedtls_cipher_base_t xts_aes_info = {
463 MBEDTLS_CIPHER_ID_AES,
464 NULL,
465#if defined(MBEDTLS_CIPHER_MODE_CBC)
466 NULL,
467#endif
468#if defined(MBEDTLS_CIPHER_MODE_CFB)
469 NULL,
470#endif
471#if defined(MBEDTLS_CIPHER_MODE_OFB)
472 NULL,
473#endif
474#if defined(MBEDTLS_CIPHER_MODE_CTR)
475 NULL,
476#endif
477#if defined(MBEDTLS_CIPHER_MODE_XTS)
478 aes_crypt_xts_wrap,
479#endif
480#if defined(MBEDTLS_CIPHER_MODE_STREAM)
481 NULL,
482#endif
483 xts_aes_setkey_enc_wrap,
484 xts_aes_setkey_dec_wrap,
485 xts_aes_ctx_alloc,
486 xts_aes_ctx_free
487};
488
489static const mbedtls_cipher_info_t aes_128_xts_info = {
490 MBEDTLS_CIPHER_AES_128_XTS,
491 MBEDTLS_MODE_XTS,
492 256,
493 "AES-128-XTS",
494 16,
495 0,
496 16,
497 &xts_aes_info
498};
499
500static const mbedtls_cipher_info_t aes_256_xts_info = {
501 MBEDTLS_CIPHER_AES_256_XTS,
502 MBEDTLS_MODE_XTS,
503 512,
504 "AES-256-XTS",
505 16,
506 0,
507 16,
508 &xts_aes_info
509};
510#endif /* MBEDTLS_CIPHER_MODE_XTS */
511
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200512#if defined(MBEDTLS_GCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100513static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
514 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200515{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100516 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
517 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200518}
519
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200520static const mbedtls_cipher_base_t gcm_aes_info = {
521 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200522 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200523#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200524 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100525#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200526#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200527 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100528#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100529#if defined(MBEDTLS_CIPHER_MODE_OFB)
530 NULL,
531#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200532#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200533 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100534#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100535#if defined(MBEDTLS_CIPHER_MODE_XTS)
536 NULL,
537#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200538#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200539 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100540#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200541 gcm_aes_setkey_wrap,
542 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200543 gcm_ctx_alloc,
544 gcm_ctx_free,
545};
546
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200547static const mbedtls_cipher_info_t aes_128_gcm_info = {
548 MBEDTLS_CIPHER_AES_128_GCM,
549 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100550 128,
551 "AES-128-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200552 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200553 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100554 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200555 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100556};
557
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200558static const mbedtls_cipher_info_t aes_192_gcm_info = {
559 MBEDTLS_CIPHER_AES_192_GCM,
560 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200561 192,
562 "AES-192-GCM",
563 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200564 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200565 16,
566 &gcm_aes_info
567};
568
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200569static const mbedtls_cipher_info_t aes_256_gcm_info = {
570 MBEDTLS_CIPHER_AES_256_GCM,
571 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100572 256,
573 "AES-256-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200574 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200575 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100576 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200577 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100578};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200579#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100580
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200581#if defined(MBEDTLS_CCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100582static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
583 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200584{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100585 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
586 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200587}
588
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200589static const mbedtls_cipher_base_t ccm_aes_info = {
590 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200591 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200592#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200593 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100594#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200595#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200596 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100597#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100598#if defined(MBEDTLS_CIPHER_MODE_OFB)
599 NULL,
600#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200601#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200602 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100603#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100604#if defined(MBEDTLS_CIPHER_MODE_XTS)
605 NULL,
606#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200607#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200608 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100609#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200610 ccm_aes_setkey_wrap,
611 ccm_aes_setkey_wrap,
612 ccm_ctx_alloc,
613 ccm_ctx_free,
614};
615
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200616static const mbedtls_cipher_info_t aes_128_ccm_info = {
617 MBEDTLS_CIPHER_AES_128_CCM,
618 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200619 128,
620 "AES-128-CCM",
621 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200622 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200623 16,
624 &ccm_aes_info
625};
626
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200627static const mbedtls_cipher_info_t aes_192_ccm_info = {
628 MBEDTLS_CIPHER_AES_192_CCM,
629 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200630 192,
631 "AES-192-CCM",
632 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200633 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200634 16,
635 &ccm_aes_info
636};
637
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200638static const mbedtls_cipher_info_t aes_256_ccm_info = {
639 MBEDTLS_CIPHER_AES_256_CCM,
640 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200641 256,
642 "AES-256-CCM",
643 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200644 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200645 16,
646 &ccm_aes_info
647};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200648#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200649
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200650#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000651
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200652#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000653
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100654static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
655 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200656{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100657 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
658 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200659}
660
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200661#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100662static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
663 size_t length, unsigned char *iv,
664 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000665{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100666 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
667 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000668}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200669#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000670
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200671#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100672static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
673 size_t length, size_t *iv_off, unsigned char *iv,
674 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000675{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100676 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
677 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000678}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200679#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000680
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200681#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100682static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
683 unsigned char *nonce_counter, unsigned char *stream_block,
684 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000685{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100686 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
687 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000688}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200689#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000690
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100691static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
692 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000693{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100694 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000695}
696
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100697static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
698 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000699{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100700 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000701}
702
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100703static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000704{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200705 mbedtls_camellia_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100706 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200707
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100708 if (ctx == NULL) {
709 return NULL;
710 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200711
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100712 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200713
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100714 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000715}
716
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100717static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000718{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100719 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
720 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000721}
722
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200723static const mbedtls_cipher_base_t camellia_info = {
724 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200725 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200726#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000727 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100728#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200729#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000730 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100731#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100732#if defined(MBEDTLS_CIPHER_MODE_OFB)
733 NULL,
734#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200735#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000736 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100737#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100738#if defined(MBEDTLS_CIPHER_MODE_XTS)
739 NULL,
740#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200741#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200742 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100743#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000744 camellia_setkey_enc_wrap,
745 camellia_setkey_dec_wrap,
746 camellia_ctx_alloc,
747 camellia_ctx_free
748};
749
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200750static const mbedtls_cipher_info_t camellia_128_ecb_info = {
751 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
752 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200753 128,
754 "CAMELLIA-128-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100755 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200756 0,
757 16,
758 &camellia_info
759};
760
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200761static const mbedtls_cipher_info_t camellia_192_ecb_info = {
762 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
763 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200764 192,
765 "CAMELLIA-192-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100766 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200767 0,
768 16,
769 &camellia_info
770};
771
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200772static const mbedtls_cipher_info_t camellia_256_ecb_info = {
773 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
774 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200775 256,
776 "CAMELLIA-256-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100777 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200778 0,
779 16,
780 &camellia_info
781};
782
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200783#if defined(MBEDTLS_CIPHER_MODE_CBC)
784static const mbedtls_cipher_info_t camellia_128_cbc_info = {
785 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
786 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000787 128,
788 "CAMELLIA-128-CBC",
789 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200790 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000791 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000792 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000793};
794
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200795static const mbedtls_cipher_info_t camellia_192_cbc_info = {
796 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
797 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000798 192,
799 "CAMELLIA-192-CBC",
800 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200801 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000802 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000803 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000804};
805
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200806static const mbedtls_cipher_info_t camellia_256_cbc_info = {
807 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
808 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000809 256,
810 "CAMELLIA-256-CBC",
811 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200812 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000813 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000814 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000815};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200816#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000817
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200818#if defined(MBEDTLS_CIPHER_MODE_CFB)
819static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
820 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
821 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000822 128,
823 "CAMELLIA-128-CFB128",
824 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200825 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000826 16,
827 &camellia_info
828};
829
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200830static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
831 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
832 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000833 192,
834 "CAMELLIA-192-CFB128",
835 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200836 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000837 16,
838 &camellia_info
839};
840
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200841static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
842 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
843 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000844 256,
845 "CAMELLIA-256-CFB128",
846 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200847 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000848 16,
849 &camellia_info
850};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200851#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000852
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200853#if defined(MBEDTLS_CIPHER_MODE_CTR)
854static const mbedtls_cipher_info_t camellia_128_ctr_info = {
855 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
856 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000857 128,
858 "CAMELLIA-128-CTR",
859 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200860 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000861 16,
862 &camellia_info
863};
864
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200865static const mbedtls_cipher_info_t camellia_192_ctr_info = {
866 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
867 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000868 192,
869 "CAMELLIA-192-CTR",
870 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200871 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000872 16,
873 &camellia_info
874};
875
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200876static const mbedtls_cipher_info_t camellia_256_ctr_info = {
877 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
878 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000879 256,
880 "CAMELLIA-256-CTR",
881 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200882 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000883 16,
884 &camellia_info
885};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200886#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000887
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200888#if defined(MBEDTLS_GCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100889static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
890 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200891{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100892 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
893 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200894}
895
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200896static const mbedtls_cipher_base_t gcm_camellia_info = {
897 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200898 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200899#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200900 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100901#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200902#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200903 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100904#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100905#if defined(MBEDTLS_CIPHER_MODE_OFB)
906 NULL,
907#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200908#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200909 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100910#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100911#if defined(MBEDTLS_CIPHER_MODE_XTS)
912 NULL,
913#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200914#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200915 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100916#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200917 gcm_camellia_setkey_wrap,
918 gcm_camellia_setkey_wrap,
919 gcm_ctx_alloc,
920 gcm_ctx_free,
921};
922
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200923static const mbedtls_cipher_info_t camellia_128_gcm_info = {
924 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
925 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200926 128,
927 "CAMELLIA-128-GCM",
928 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200929 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200930 16,
931 &gcm_camellia_info
932};
933
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200934static const mbedtls_cipher_info_t camellia_192_gcm_info = {
935 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
936 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200937 192,
938 "CAMELLIA-192-GCM",
939 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200940 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200941 16,
942 &gcm_camellia_info
943};
944
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200945static const mbedtls_cipher_info_t camellia_256_gcm_info = {
946 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
947 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200948 256,
949 "CAMELLIA-256-GCM",
950 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200951 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200952 16,
953 &gcm_camellia_info
954};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200955#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200956
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200957#if defined(MBEDTLS_CCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100958static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
959 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200960{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100961 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
962 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200963}
964
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200965static const mbedtls_cipher_base_t ccm_camellia_info = {
966 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200967 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200968#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200969 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100970#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200971#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200972 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100973#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100974#if defined(MBEDTLS_CIPHER_MODE_OFB)
975 NULL,
976#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200977#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200978 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100979#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100980#if defined(MBEDTLS_CIPHER_MODE_XTS)
981 NULL,
982#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200983#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200984 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100985#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200986 ccm_camellia_setkey_wrap,
987 ccm_camellia_setkey_wrap,
988 ccm_ctx_alloc,
989 ccm_ctx_free,
990};
991
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200992static const mbedtls_cipher_info_t camellia_128_ccm_info = {
993 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
994 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200995 128,
996 "CAMELLIA-128-CCM",
997 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200998 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200999 16,
1000 &ccm_camellia_info
1001};
1002
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001003static const mbedtls_cipher_info_t camellia_192_ccm_info = {
1004 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
1005 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001006 192,
1007 "CAMELLIA-192-CCM",
1008 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001009 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001010 16,
1011 &ccm_camellia_info
1012};
1013
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001014static const mbedtls_cipher_info_t camellia_256_ccm_info = {
1015 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
1016 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001017 256,
1018 "CAMELLIA-256-CCM",
1019 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001020 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001021 16,
1022 &ccm_camellia_info
1023};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001024#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001025
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001026#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001027
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001028#if defined(MBEDTLS_ARIA_C)
1029
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001030static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1031 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001032{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001033 (void) operation;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001034 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1035 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001036}
1037
1038#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001039static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1040 size_t length, unsigned char *iv,
1041 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001042{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001043 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1044 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001045}
1046#endif /* MBEDTLS_CIPHER_MODE_CBC */
1047
1048#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001049static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1050 size_t length, size_t *iv_off, unsigned char *iv,
1051 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001052{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001053 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1054 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001055}
1056#endif /* MBEDTLS_CIPHER_MODE_CFB */
1057
1058#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001059static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1060 unsigned char *nonce_counter, unsigned char *stream_block,
1061 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001062{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001063 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1064 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001065}
1066#endif /* MBEDTLS_CIPHER_MODE_CTR */
1067
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001068static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1069 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001070{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001071 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001072}
1073
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001074static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1075 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001076{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001077 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001078}
1079
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001080static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001081{
1082 mbedtls_aria_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001083 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001084
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001085 if (ctx == NULL) {
1086 return NULL;
1087 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001088
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001089 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001090
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001091 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001092}
1093
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001094static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001095{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001096 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1097 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001098}
1099
1100static const mbedtls_cipher_base_t aria_info = {
1101 MBEDTLS_CIPHER_ID_ARIA,
1102 aria_crypt_ecb_wrap,
1103#if defined(MBEDTLS_CIPHER_MODE_CBC)
1104 aria_crypt_cbc_wrap,
1105#endif
1106#if defined(MBEDTLS_CIPHER_MODE_CFB)
1107 aria_crypt_cfb128_wrap,
1108#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001109#if defined(MBEDTLS_CIPHER_MODE_OFB)
1110 NULL,
1111#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001112#if defined(MBEDTLS_CIPHER_MODE_CTR)
1113 aria_crypt_ctr_wrap,
1114#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001115#if defined(MBEDTLS_CIPHER_MODE_XTS)
1116 NULL,
1117#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001118#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1119 NULL,
1120#endif
1121 aria_setkey_enc_wrap,
1122 aria_setkey_dec_wrap,
1123 aria_ctx_alloc,
1124 aria_ctx_free
1125};
1126
1127static const mbedtls_cipher_info_t aria_128_ecb_info = {
1128 MBEDTLS_CIPHER_ARIA_128_ECB,
1129 MBEDTLS_MODE_ECB,
1130 128,
1131 "ARIA-128-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001132 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001133 0,
1134 16,
1135 &aria_info
1136};
1137
1138static const mbedtls_cipher_info_t aria_192_ecb_info = {
1139 MBEDTLS_CIPHER_ARIA_192_ECB,
1140 MBEDTLS_MODE_ECB,
1141 192,
1142 "ARIA-192-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001143 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001144 0,
1145 16,
1146 &aria_info
1147};
1148
1149static const mbedtls_cipher_info_t aria_256_ecb_info = {
1150 MBEDTLS_CIPHER_ARIA_256_ECB,
1151 MBEDTLS_MODE_ECB,
1152 256,
1153 "ARIA-256-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001154 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001155 0,
1156 16,
1157 &aria_info
1158};
1159
1160#if defined(MBEDTLS_CIPHER_MODE_CBC)
1161static const mbedtls_cipher_info_t aria_128_cbc_info = {
1162 MBEDTLS_CIPHER_ARIA_128_CBC,
1163 MBEDTLS_MODE_CBC,
1164 128,
1165 "ARIA-128-CBC",
1166 16,
1167 0,
1168 16,
1169 &aria_info
1170};
1171
1172static const mbedtls_cipher_info_t aria_192_cbc_info = {
1173 MBEDTLS_CIPHER_ARIA_192_CBC,
1174 MBEDTLS_MODE_CBC,
1175 192,
1176 "ARIA-192-CBC",
1177 16,
1178 0,
1179 16,
1180 &aria_info
1181};
1182
1183static const mbedtls_cipher_info_t aria_256_cbc_info = {
1184 MBEDTLS_CIPHER_ARIA_256_CBC,
1185 MBEDTLS_MODE_CBC,
1186 256,
1187 "ARIA-256-CBC",
1188 16,
1189 0,
1190 16,
1191 &aria_info
1192};
1193#endif /* MBEDTLS_CIPHER_MODE_CBC */
1194
1195#if defined(MBEDTLS_CIPHER_MODE_CFB)
1196static const mbedtls_cipher_info_t aria_128_cfb128_info = {
1197 MBEDTLS_CIPHER_ARIA_128_CFB128,
1198 MBEDTLS_MODE_CFB,
1199 128,
1200 "ARIA-128-CFB128",
1201 16,
1202 0,
1203 16,
1204 &aria_info
1205};
1206
1207static const mbedtls_cipher_info_t aria_192_cfb128_info = {
1208 MBEDTLS_CIPHER_ARIA_192_CFB128,
1209 MBEDTLS_MODE_CFB,
1210 192,
1211 "ARIA-192-CFB128",
1212 16,
1213 0,
1214 16,
1215 &aria_info
1216};
1217
1218static const mbedtls_cipher_info_t aria_256_cfb128_info = {
1219 MBEDTLS_CIPHER_ARIA_256_CFB128,
1220 MBEDTLS_MODE_CFB,
1221 256,
1222 "ARIA-256-CFB128",
1223 16,
1224 0,
1225 16,
1226 &aria_info
1227};
1228#endif /* MBEDTLS_CIPHER_MODE_CFB */
1229
1230#if defined(MBEDTLS_CIPHER_MODE_CTR)
1231static const mbedtls_cipher_info_t aria_128_ctr_info = {
1232 MBEDTLS_CIPHER_ARIA_128_CTR,
1233 MBEDTLS_MODE_CTR,
1234 128,
1235 "ARIA-128-CTR",
1236 16,
1237 0,
1238 16,
1239 &aria_info
1240};
1241
1242static const mbedtls_cipher_info_t aria_192_ctr_info = {
1243 MBEDTLS_CIPHER_ARIA_192_CTR,
1244 MBEDTLS_MODE_CTR,
1245 192,
1246 "ARIA-192-CTR",
1247 16,
1248 0,
1249 16,
1250 &aria_info
1251};
1252
1253static const mbedtls_cipher_info_t aria_256_ctr_info = {
1254 MBEDTLS_CIPHER_ARIA_256_CTR,
1255 MBEDTLS_MODE_CTR,
1256 256,
1257 "ARIA-256-CTR",
1258 16,
1259 0,
1260 16,
1261 &aria_info
1262};
1263#endif /* MBEDTLS_CIPHER_MODE_CTR */
1264
1265#if defined(MBEDTLS_GCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001266static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1267 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001268{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001269 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1270 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001271}
1272
1273static const mbedtls_cipher_base_t gcm_aria_info = {
1274 MBEDTLS_CIPHER_ID_ARIA,
1275 NULL,
1276#if defined(MBEDTLS_CIPHER_MODE_CBC)
1277 NULL,
1278#endif
1279#if defined(MBEDTLS_CIPHER_MODE_CFB)
1280 NULL,
1281#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001282#if defined(MBEDTLS_CIPHER_MODE_OFB)
1283 NULL,
1284#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001285#if defined(MBEDTLS_CIPHER_MODE_CTR)
1286 NULL,
1287#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001288#if defined(MBEDTLS_CIPHER_MODE_XTS)
1289 NULL,
1290#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001291#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1292 NULL,
1293#endif
1294 gcm_aria_setkey_wrap,
1295 gcm_aria_setkey_wrap,
1296 gcm_ctx_alloc,
1297 gcm_ctx_free,
1298};
1299
1300static const mbedtls_cipher_info_t aria_128_gcm_info = {
1301 MBEDTLS_CIPHER_ARIA_128_GCM,
1302 MBEDTLS_MODE_GCM,
1303 128,
1304 "ARIA-128-GCM",
1305 12,
1306 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1307 16,
1308 &gcm_aria_info
1309};
1310
1311static const mbedtls_cipher_info_t aria_192_gcm_info = {
1312 MBEDTLS_CIPHER_ARIA_192_GCM,
1313 MBEDTLS_MODE_GCM,
1314 192,
1315 "ARIA-192-GCM",
1316 12,
1317 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1318 16,
1319 &gcm_aria_info
1320};
1321
1322static const mbedtls_cipher_info_t aria_256_gcm_info = {
1323 MBEDTLS_CIPHER_ARIA_256_GCM,
1324 MBEDTLS_MODE_GCM,
1325 256,
1326 "ARIA-256-GCM",
1327 12,
1328 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1329 16,
1330 &gcm_aria_info
1331};
1332#endif /* MBEDTLS_GCM_C */
1333
1334#if defined(MBEDTLS_CCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001335static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1336 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001337{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001338 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1339 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001340}
1341
1342static const mbedtls_cipher_base_t ccm_aria_info = {
1343 MBEDTLS_CIPHER_ID_ARIA,
1344 NULL,
1345#if defined(MBEDTLS_CIPHER_MODE_CBC)
1346 NULL,
1347#endif
1348#if defined(MBEDTLS_CIPHER_MODE_CFB)
1349 NULL,
1350#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001351#if defined(MBEDTLS_CIPHER_MODE_OFB)
1352 NULL,
1353#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001354#if defined(MBEDTLS_CIPHER_MODE_CTR)
1355 NULL,
1356#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001357#if defined(MBEDTLS_CIPHER_MODE_XTS)
1358 NULL,
1359#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001360#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1361 NULL,
1362#endif
1363 ccm_aria_setkey_wrap,
1364 ccm_aria_setkey_wrap,
1365 ccm_ctx_alloc,
1366 ccm_ctx_free,
1367};
1368
1369static const mbedtls_cipher_info_t aria_128_ccm_info = {
1370 MBEDTLS_CIPHER_ARIA_128_CCM,
1371 MBEDTLS_MODE_CCM,
1372 128,
1373 "ARIA-128-CCM",
1374 12,
1375 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1376 16,
1377 &ccm_aria_info
1378};
1379
1380static const mbedtls_cipher_info_t aria_192_ccm_info = {
1381 MBEDTLS_CIPHER_ARIA_192_CCM,
1382 MBEDTLS_MODE_CCM,
1383 192,
1384 "ARIA-192-CCM",
1385 12,
1386 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1387 16,
1388 &ccm_aria_info
1389};
1390
1391static const mbedtls_cipher_info_t aria_256_ccm_info = {
1392 MBEDTLS_CIPHER_ARIA_256_CCM,
1393 MBEDTLS_MODE_CCM,
1394 256,
1395 "ARIA-256-CCM",
1396 12,
1397 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1398 16,
1399 &ccm_aria_info
1400};
1401#endif /* MBEDTLS_CCM_C */
1402
1403#endif /* MBEDTLS_ARIA_C */
1404
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001405#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001406
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001407static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1408 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001409{
1410 ((void) operation);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001411 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001412}
1413
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001414static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1415 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001416{
1417 ((void) operation);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001418 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001419}
1420
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001421#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001422static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1423 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001424{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001425 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1426 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001427}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001428#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001429
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001430#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001431static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1432 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001433{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001434 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1435 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001436}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001437#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001438
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001439static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1440 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001441{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001442 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001443
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001444 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001445}
1446
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001447static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1448 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001449{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001450 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001451
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001452 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001453}
1454
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001455static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1456 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001457{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001458 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001459
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001460 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001461}
1462
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001463static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1464 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001465{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001466 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001467
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001468 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001469}
1470
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001471static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1472 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001473{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001474 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001475
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001476 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001477}
1478
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001479static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1480 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001481{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001482 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001483
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001484 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001485}
1486
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001487static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001488{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001489 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001490
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001491 if (des == NULL) {
1492 return NULL;
1493 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001494
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001495 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001496
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001497 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001498}
1499
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001500static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001501{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001502 mbedtls_des_free((mbedtls_des_context *) ctx);
1503 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001504}
1505
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001506static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001507{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001508 mbedtls_des3_context *des3;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001509 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001510
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001511 if (des3 == NULL) {
1512 return NULL;
1513 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001514
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001515 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001516
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001517 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001518}
1519
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001520static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001521{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001522 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1523 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001524}
1525
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001526static const mbedtls_cipher_base_t des_info = {
1527 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001528 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001529#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001530 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001531#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001532#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001533 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001534#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001535#if defined(MBEDTLS_CIPHER_MODE_OFB)
1536 NULL,
1537#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001538#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001539 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001540#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001541#if defined(MBEDTLS_CIPHER_MODE_XTS)
1542 NULL,
1543#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001544#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001545 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001546#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001547 des_setkey_enc_wrap,
1548 des_setkey_dec_wrap,
1549 des_ctx_alloc,
1550 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001551};
1552
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001553static const mbedtls_cipher_info_t des_ecb_info = {
1554 MBEDTLS_CIPHER_DES_ECB,
1555 MBEDTLS_MODE_ECB,
1556 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001557 "DES-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001558 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001559 0,
1560 8,
1561 &des_info
1562};
1563
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001564#if defined(MBEDTLS_CIPHER_MODE_CBC)
1565static const mbedtls_cipher_info_t des_cbc_info = {
1566 MBEDTLS_CIPHER_DES_CBC,
1567 MBEDTLS_MODE_CBC,
1568 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker343a8702011-06-09 14:27:58 +00001569 "DES-CBC",
1570 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001571 0,
Paul Bakker343a8702011-06-09 14:27:58 +00001572 8,
1573 &des_info
1574};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001575#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001576
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001577static const mbedtls_cipher_base_t des_ede_info = {
1578 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001579 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001580#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001581 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001582#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001583#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001584 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001585#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001586#if defined(MBEDTLS_CIPHER_MODE_OFB)
1587 NULL,
1588#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001589#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001590 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001591#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001592#if defined(MBEDTLS_CIPHER_MODE_XTS)
1593 NULL,
1594#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001595#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001596 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001597#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001598 des3_set2key_enc_wrap,
1599 des3_set2key_dec_wrap,
1600 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001601 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001602};
1603
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001604static const mbedtls_cipher_info_t des_ede_ecb_info = {
1605 MBEDTLS_CIPHER_DES_EDE_ECB,
1606 MBEDTLS_MODE_ECB,
1607 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001608 "DES-EDE-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001609 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001610 0,
1611 8,
1612 &des_ede_info
1613};
1614
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001615#if defined(MBEDTLS_CIPHER_MODE_CBC)
1616static const mbedtls_cipher_info_t des_ede_cbc_info = {
1617 MBEDTLS_CIPHER_DES_EDE_CBC,
1618 MBEDTLS_MODE_CBC,
1619 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker343a8702011-06-09 14:27:58 +00001620 "DES-EDE-CBC",
Paul Bakker0e342352013-06-24 19:33:02 +02001621 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001622 0,
Paul Bakker0e342352013-06-24 19:33:02 +02001623 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001624 &des_ede_info
1625};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001626#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001627
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001628static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001629 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001630 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001631#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001632 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001633#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001634#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001635 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001636#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001637#if defined(MBEDTLS_CIPHER_MODE_OFB)
1638 NULL,
1639#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001640#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001641 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001642#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001643#if defined(MBEDTLS_CIPHER_MODE_XTS)
1644 NULL,
1645#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001646#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001647 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001648#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001649 des3_set3key_enc_wrap,
1650 des3_set3key_dec_wrap,
1651 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001652 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001653};
1654
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001655static const mbedtls_cipher_info_t des_ede3_ecb_info = {
1656 MBEDTLS_CIPHER_DES_EDE3_ECB,
1657 MBEDTLS_MODE_ECB,
1658 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001659 "DES-EDE3-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001660 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001661 0,
1662 8,
1663 &des_ede3_info
1664};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001665#if defined(MBEDTLS_CIPHER_MODE_CBC)
1666static const mbedtls_cipher_info_t des_ede3_cbc_info = {
1667 MBEDTLS_CIPHER_DES_EDE3_CBC,
1668 MBEDTLS_MODE_CBC,
1669 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker23986e52011-04-24 08:57:21 +00001670 "DES-EDE3-CBC",
1671 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001672 0,
Paul Bakker23986e52011-04-24 08:57:21 +00001673 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001674 &des_ede3_info
Paul Bakker8123e9d2011-01-06 15:37:30 +00001675};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001676#endif /* MBEDTLS_CIPHER_MODE_CBC */
1677#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001678
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001679#if defined(MBEDTLS_BLOWFISH_C)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001680
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001681static int blowfish_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1682 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001683{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001684 return mbedtls_blowfish_crypt_ecb((mbedtls_blowfish_context *) ctx, operation, input,
1685 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001686}
1687
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001688#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001689static int blowfish_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1690 size_t length, unsigned char *iv, const unsigned char *input,
1691 unsigned char *output)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001692{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001693 return mbedtls_blowfish_crypt_cbc((mbedtls_blowfish_context *) ctx, operation, length, iv,
1694 input, output);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001695}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001696#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001697
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001698#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001699static int blowfish_crypt_cfb64_wrap(void *ctx, mbedtls_operation_t operation,
1700 size_t length, size_t *iv_off, unsigned char *iv,
1701 const unsigned char *input, unsigned char *output)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001702{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001703 return mbedtls_blowfish_crypt_cfb64((mbedtls_blowfish_context *) ctx, operation, length,
1704 iv_off, iv, input, output);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001705}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001706#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001707
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001708#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001709static int blowfish_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1710 unsigned char *nonce_counter, unsigned char *stream_block,
1711 const unsigned char *input, unsigned char *output)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001712{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001713 return mbedtls_blowfish_crypt_ctr((mbedtls_blowfish_context *) ctx, length, nc_off,
1714 nonce_counter, stream_block, input, output);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001715}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001716#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001717
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001718static int blowfish_setkey_wrap(void *ctx, const unsigned char *key,
1719 unsigned int key_bitlen)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001720{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001721 return mbedtls_blowfish_setkey((mbedtls_blowfish_context *) ctx, key, key_bitlen);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001722}
1723
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001724static void *blowfish_ctx_alloc(void)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001725{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001726 mbedtls_blowfish_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001727 ctx = mbedtls_calloc(1, sizeof(mbedtls_blowfish_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001728
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001729 if (ctx == NULL) {
1730 return NULL;
1731 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001732
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001733 mbedtls_blowfish_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001734
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001735 return ctx;
Paul Bakker6132d0a2012-07-04 17:10:40 +00001736}
1737
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001738static void blowfish_ctx_free(void *ctx)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001739{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001740 mbedtls_blowfish_free((mbedtls_blowfish_context *) ctx);
1741 mbedtls_free(ctx);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001742}
1743
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001744static const mbedtls_cipher_base_t blowfish_info = {
1745 MBEDTLS_CIPHER_ID_BLOWFISH,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001746 blowfish_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001747#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001748 blowfish_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001749#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001750#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001751 blowfish_crypt_cfb64_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001752#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001753#if defined(MBEDTLS_CIPHER_MODE_OFB)
1754 NULL,
1755#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001756#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001757 blowfish_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001758#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001759#if defined(MBEDTLS_CIPHER_MODE_XTS)
1760 NULL,
1761#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001762#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001763 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001764#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001765 blowfish_setkey_wrap,
1766 blowfish_setkey_wrap,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001767 blowfish_ctx_alloc,
1768 blowfish_ctx_free
1769};
1770
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001771static const mbedtls_cipher_info_t blowfish_ecb_info = {
1772 MBEDTLS_CIPHER_BLOWFISH_ECB,
1773 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001774 128,
1775 "BLOWFISH-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001776 0,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001777 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001778 8,
1779 &blowfish_info
1780};
1781
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001782#if defined(MBEDTLS_CIPHER_MODE_CBC)
1783static const mbedtls_cipher_info_t blowfish_cbc_info = {
1784 MBEDTLS_CIPHER_BLOWFISH_CBC,
1785 MBEDTLS_MODE_CBC,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001786 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001787 "BLOWFISH-CBC",
1788 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001789 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001790 8,
1791 &blowfish_info
1792};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001793#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001794
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001795#if defined(MBEDTLS_CIPHER_MODE_CFB)
1796static const mbedtls_cipher_info_t blowfish_cfb64_info = {
1797 MBEDTLS_CIPHER_BLOWFISH_CFB64,
1798 MBEDTLS_MODE_CFB,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001799 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001800 "BLOWFISH-CFB64",
1801 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001802 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001803 8,
1804 &blowfish_info
1805};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001806#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001807
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001808#if defined(MBEDTLS_CIPHER_MODE_CTR)
1809static const mbedtls_cipher_info_t blowfish_ctr_info = {
1810 MBEDTLS_CIPHER_BLOWFISH_CTR,
1811 MBEDTLS_MODE_CTR,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001812 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001813 "BLOWFISH-CTR",
1814 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001815 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001816 8,
1817 &blowfish_info
1818};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001819#endif /* MBEDTLS_CIPHER_MODE_CTR */
1820#endif /* MBEDTLS_BLOWFISH_C */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001821
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001822#if defined(MBEDTLS_ARC4_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001823static int arc4_crypt_stream_wrap(void *ctx, size_t length,
1824 const unsigned char *input,
1825 unsigned char *output)
Paul Bakker68884e32013-01-07 18:20:04 +01001826{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001827 return mbedtls_arc4_crypt((mbedtls_arc4_context *) ctx, length, input, output);
Paul Bakker68884e32013-01-07 18:20:04 +01001828}
1829
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001830static int arc4_setkey_wrap(void *ctx, const unsigned char *key,
1831 unsigned int key_bitlen)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001832{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001833 /* we get key_bitlen in bits, arc4 expects it in bytes */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001834 if (key_bitlen % 8 != 0) {
1835 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1836 }
Manuel Pégourié-Gonnardce411252013-09-04 12:28:37 +02001837
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001838 mbedtls_arc4_setup((mbedtls_arc4_context *) ctx, key, key_bitlen / 8);
1839 return 0;
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001840}
1841
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001842static void *arc4_ctx_alloc(void)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001843{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001844 mbedtls_arc4_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001845 ctx = mbedtls_calloc(1, sizeof(mbedtls_arc4_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001846
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001847 if (ctx == NULL) {
1848 return NULL;
1849 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001850
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001851 mbedtls_arc4_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001852
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001853 return ctx;
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001854}
Paul Bakker68884e32013-01-07 18:20:04 +01001855
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001856static void arc4_ctx_free(void *ctx)
Paul Bakker68884e32013-01-07 18:20:04 +01001857{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001858 mbedtls_arc4_free((mbedtls_arc4_context *) ctx);
1859 mbedtls_free(ctx);
Paul Bakker68884e32013-01-07 18:20:04 +01001860}
1861
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001862static const mbedtls_cipher_base_t arc4_base_info = {
1863 MBEDTLS_CIPHER_ID_ARC4,
Paul Bakker68884e32013-01-07 18:20:04 +01001864 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001865#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker68884e32013-01-07 18:20:04 +01001866 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001867#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001868#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker68884e32013-01-07 18:20:04 +01001869 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001870#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001871#if defined(MBEDTLS_CIPHER_MODE_OFB)
1872 NULL,
1873#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001874#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001875 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001876#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001877#if defined(MBEDTLS_CIPHER_MODE_XTS)
1878 NULL,
1879#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001880#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001881 arc4_crypt_stream_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001882#endif
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001883 arc4_setkey_wrap,
1884 arc4_setkey_wrap,
Paul Bakker68884e32013-01-07 18:20:04 +01001885 arc4_ctx_alloc,
1886 arc4_ctx_free
1887};
1888
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001889static const mbedtls_cipher_info_t arc4_128_info = {
1890 MBEDTLS_CIPHER_ARC4_128,
1891 MBEDTLS_MODE_STREAM,
Paul Bakker68884e32013-01-07 18:20:04 +01001892 128,
1893 "ARC4-128",
1894 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001895 0,
Paul Bakker68884e32013-01-07 18:20:04 +01001896 1,
1897 &arc4_base_info
1898};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001899#endif /* MBEDTLS_ARC4_C */
Paul Bakker68884e32013-01-07 18:20:04 +01001900
Daniel Kingbd920622016-05-15 19:56:20 -03001901#if defined(MBEDTLS_CHACHA20_C)
1902
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001903static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1904 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001905{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001906 if (key_bitlen != 256U) {
1907 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1908 }
Daniel Kingbd920622016-05-15 19:56:20 -03001909
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001910 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1911 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1912 }
Daniel Kingbd920622016-05-15 19:56:20 -03001913
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001914 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001915}
1916
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001917static int chacha20_stream_wrap(void *ctx, size_t length,
1918 const unsigned char *input,
1919 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001920{
Janos Follath24eed8d2019-11-22 13:21:35 +00001921 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001922
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001923 ret = mbedtls_chacha20_update(ctx, length, input, output);
1924 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1925 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1926 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001927
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001928 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001929}
1930
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001931static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001932{
1933 mbedtls_chacha20_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001934 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001935
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001936 if (ctx == NULL) {
1937 return NULL;
1938 }
Daniel Kingbd920622016-05-15 19:56:20 -03001939
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001940 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001941
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001942 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001943}
1944
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001945static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001946{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001947 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1948 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001949}
1950
1951static const mbedtls_cipher_base_t chacha20_base_info = {
1952 MBEDTLS_CIPHER_ID_CHACHA20,
1953 NULL,
1954#if defined(MBEDTLS_CIPHER_MODE_CBC)
1955 NULL,
1956#endif
1957#if defined(MBEDTLS_CIPHER_MODE_CFB)
1958 NULL,
1959#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001960#if defined(MBEDTLS_CIPHER_MODE_OFB)
1961 NULL,
1962#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001963#if defined(MBEDTLS_CIPHER_MODE_CTR)
1964 NULL,
1965#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001966#if defined(MBEDTLS_CIPHER_MODE_XTS)
1967 NULL,
1968#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001969#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001970 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001971#endif
1972 chacha20_setkey_wrap,
1973 chacha20_setkey_wrap,
1974 chacha20_ctx_alloc,
1975 chacha20_ctx_free
1976};
1977static const mbedtls_cipher_info_t chacha20_info = {
1978 MBEDTLS_CIPHER_CHACHA20,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001979 MBEDTLS_MODE_STREAM,
Daniel Kingbd920622016-05-15 19:56:20 -03001980 256,
1981 "CHACHA20",
1982 12,
1983 0,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001984 1,
Daniel Kingbd920622016-05-15 19:56:20 -03001985 &chacha20_base_info
1986};
1987#endif /* MBEDTLS_CHACHA20_C */
1988
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001989#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001990
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001991static int chachapoly_setkey_wrap(void *ctx,
1992 const unsigned char *key,
1993 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001994{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001995 if (key_bitlen != 256U) {
1996 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1997 }
Daniel King8fe47012016-05-17 20:33:28 -03001998
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001999 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
2000 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
2001 }
Daniel King8fe47012016-05-17 20:33:28 -03002002
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002003 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03002004}
2005
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002006static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03002007{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002008 mbedtls_chachapoly_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002009 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03002010
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002011 if (ctx == NULL) {
2012 return NULL;
2013 }
Daniel King8fe47012016-05-17 20:33:28 -03002014
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002015 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03002016
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002017 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03002018}
2019
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002020static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03002021{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002022 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
2023 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03002024}
2025
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002026static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03002027 MBEDTLS_CIPHER_ID_CHACHA20,
2028 NULL,
2029#if defined(MBEDTLS_CIPHER_MODE_CBC)
2030 NULL,
2031#endif
2032#if defined(MBEDTLS_CIPHER_MODE_CFB)
2033 NULL,
2034#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002035#if defined(MBEDTLS_CIPHER_MODE_OFB)
2036 NULL,
2037#endif
Daniel King8fe47012016-05-17 20:33:28 -03002038#if defined(MBEDTLS_CIPHER_MODE_CTR)
2039 NULL,
2040#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002041#if defined(MBEDTLS_CIPHER_MODE_XTS)
2042 NULL,
2043#endif
Daniel King8fe47012016-05-17 20:33:28 -03002044#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2045 NULL,
2046#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002047 chachapoly_setkey_wrap,
2048 chachapoly_setkey_wrap,
2049 chachapoly_ctx_alloc,
2050 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002051};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002052static const mbedtls_cipher_info_t chachapoly_info = {
Daniel King8fe47012016-05-17 20:33:28 -03002053 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Manuel Pégourié-Gonnardf57bf8b2018-06-18 11:14:09 +02002054 MBEDTLS_MODE_CHACHAPOLY,
Daniel King8fe47012016-05-17 20:33:28 -03002055 256,
2056 "CHACHA20-POLY1305",
2057 12,
2058 0,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02002059 1,
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002060 &chachapoly_base_info
Daniel King8fe47012016-05-17 20:33:28 -03002061};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002062#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002063
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002064#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002065static int null_crypt_stream(void *ctx, size_t length,
2066 const unsigned char *input,
2067 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002068{
2069 ((void) ctx);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002070 memmove(output, input, length);
2071 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002072}
2073
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002074static int null_setkey(void *ctx, const unsigned char *key,
2075 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002076{
2077 ((void) ctx);
2078 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002079 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002080
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002081 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002082}
2083
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002084static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002085{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002086 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002087}
2088
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002089static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002090{
2091 ((void) ctx);
2092}
2093
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002094static const mbedtls_cipher_base_t null_base_info = {
2095 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002096 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002097#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002098 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002099#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002100#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002101 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002102#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002103#if defined(MBEDTLS_CIPHER_MODE_OFB)
2104 NULL,
2105#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002106#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002107 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002108#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002109#if defined(MBEDTLS_CIPHER_MODE_XTS)
2110 NULL,
2111#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002112#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002113 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002114#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002115 null_setkey,
2116 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002117 null_ctx_alloc,
2118 null_ctx_free
2119};
2120
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002121static const mbedtls_cipher_info_t null_cipher_info = {
2122 MBEDTLS_CIPHER_NULL,
2123 MBEDTLS_MODE_STREAM,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002124 0,
2125 "NULL",
Paul Bakker68884e32013-01-07 18:20:04 +01002126 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002127 0,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002128 1,
2129 &null_base_info
2130};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002131#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002132
Jack Lloydffdf2882019-03-07 17:00:32 -05002133#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002134static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002135{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002136 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002137
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002138 if (ctx != NULL) {
2139 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2140 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002141
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002142 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002143}
2144
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002145static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002146{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002147 mbedtls_nist_kw_free(ctx);
2148 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002149}
2150
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002151static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2152 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002153{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002154 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2155 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002156}
2157
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002158static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2159 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002160{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002161 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2162 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002163}
2164
2165static const mbedtls_cipher_base_t kw_aes_info = {
2166 MBEDTLS_CIPHER_ID_AES,
2167 NULL,
2168#if defined(MBEDTLS_CIPHER_MODE_CBC)
2169 NULL,
2170#endif
2171#if defined(MBEDTLS_CIPHER_MODE_CFB)
2172 NULL,
2173#endif
2174#if defined(MBEDTLS_CIPHER_MODE_OFB)
2175 NULL,
2176#endif
2177#if defined(MBEDTLS_CIPHER_MODE_CTR)
2178 NULL,
2179#endif
2180#if defined(MBEDTLS_CIPHER_MODE_XTS)
2181 NULL,
2182#endif
2183#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2184 NULL,
2185#endif
2186 kw_aes_setkey_wrap,
2187 kw_aes_setkey_unwrap,
2188 kw_ctx_alloc,
2189 kw_ctx_free,
2190};
2191
2192static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
2193 MBEDTLS_CIPHER_AES_128_KW,
2194 MBEDTLS_MODE_KW,
2195 128,
2196 "AES-128-KW",
2197 0,
2198 0,
2199 16,
2200 &kw_aes_info
2201};
2202
2203static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
2204 MBEDTLS_CIPHER_AES_192_KW,
2205 MBEDTLS_MODE_KW,
2206 192,
2207 "AES-192-KW",
2208 0,
2209 0,
2210 16,
2211 &kw_aes_info
2212};
2213
2214static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
2215 MBEDTLS_CIPHER_AES_256_KW,
2216 MBEDTLS_MODE_KW,
2217 256,
2218 "AES-256-KW",
2219 0,
2220 0,
2221 16,
2222 &kw_aes_info
2223};
2224
2225static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
2226 MBEDTLS_CIPHER_AES_128_KWP,
2227 MBEDTLS_MODE_KWP,
2228 128,
2229 "AES-128-KWP",
2230 0,
2231 0,
2232 16,
2233 &kw_aes_info
2234};
2235
2236static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
2237 MBEDTLS_CIPHER_AES_192_KWP,
2238 MBEDTLS_MODE_KWP,
2239 192,
2240 "AES-192-KWP",
2241 0,
2242 0,
2243 16,
2244 &kw_aes_info
2245};
2246
2247static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
2248 MBEDTLS_CIPHER_AES_256_KWP,
2249 MBEDTLS_MODE_KWP,
2250 256,
2251 "AES-256-KWP",
2252 0,
2253 0,
2254 16,
2255 &kw_aes_info
2256};
2257#endif /* MBEDTLS_NIST_KW_C */
2258
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002259const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002260{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002261#if defined(MBEDTLS_AES_C)
2262 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2263 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2264 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2265#if defined(MBEDTLS_CIPHER_MODE_CBC)
2266 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2267 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2268 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002269#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002270#if defined(MBEDTLS_CIPHER_MODE_CFB)
2271 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2272 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2273 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002274#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002275#if defined(MBEDTLS_CIPHER_MODE_OFB)
2276 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2277 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2278 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2279#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002280#if defined(MBEDTLS_CIPHER_MODE_CTR)
2281 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2282 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2283 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002284#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002285#if defined(MBEDTLS_CIPHER_MODE_XTS)
2286 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2287 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2288#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002289#if defined(MBEDTLS_GCM_C)
2290 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2291 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2292 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002293#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002294#if defined(MBEDTLS_CCM_C)
2295 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2296 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2297 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002298#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002299#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002300
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002301#if defined(MBEDTLS_ARC4_C)
2302 { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002303#endif
2304
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002305#if defined(MBEDTLS_BLOWFISH_C)
2306 { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info },
2307#if defined(MBEDTLS_CIPHER_MODE_CBC)
2308 { MBEDTLS_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002309#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002310#if defined(MBEDTLS_CIPHER_MODE_CFB)
2311 { MBEDTLS_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002312#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002313#if defined(MBEDTLS_CIPHER_MODE_CTR)
2314 { MBEDTLS_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002315#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002316#endif /* MBEDTLS_BLOWFISH_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002317
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002318#if defined(MBEDTLS_CAMELLIA_C)
2319 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2320 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2321 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2322#if defined(MBEDTLS_CIPHER_MODE_CBC)
2323 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2324 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2325 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002326#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002327#if defined(MBEDTLS_CIPHER_MODE_CFB)
2328 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2329 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2330 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002331#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002332#if defined(MBEDTLS_CIPHER_MODE_CTR)
2333 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2334 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2335 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002336#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002337#if defined(MBEDTLS_GCM_C)
2338 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2339 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2340 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002341#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002342#if defined(MBEDTLS_CCM_C)
2343 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2344 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2345 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002346#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002347#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002348
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002349#if defined(MBEDTLS_ARIA_C)
2350 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2351 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2352 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2353#if defined(MBEDTLS_CIPHER_MODE_CBC)
2354 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2355 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2356 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2357#endif
2358#if defined(MBEDTLS_CIPHER_MODE_CFB)
2359 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2360 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2361 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2362#endif
2363#if defined(MBEDTLS_CIPHER_MODE_CTR)
2364 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2365 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2366 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2367#endif
2368#if defined(MBEDTLS_GCM_C)
2369 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2370 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2371 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2372#endif
2373#if defined(MBEDTLS_CCM_C)
2374 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2375 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2376 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
2377#endif
2378#endif /* MBEDTLS_ARIA_C */
2379
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002380#if defined(MBEDTLS_DES_C)
2381 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2382 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2383 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2384#if defined(MBEDTLS_CIPHER_MODE_CBC)
2385 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2386 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2387 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002388#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002389#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002390
Daniel Kingbd920622016-05-15 19:56:20 -03002391#if defined(MBEDTLS_CHACHA20_C)
2392 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2393#endif
2394
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002395#if defined(MBEDTLS_CHACHAPOLY_C)
2396 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002397#endif
2398
Jack Lloydffdf2882019-03-07 17:00:32 -05002399#if defined(MBEDTLS_NIST_KW_C)
2400 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2401 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2402 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2403 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2404 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2405 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2406#endif
2407
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002408#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2409 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2410#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002411
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002412 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002413};
2414
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002415#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2416 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002417int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002418
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002419#endif /* MBEDTLS_CIPHER_C */