blob: 5f8dde3f4a3bd5ba16690607053d21ebf4c46def [file] [log] [blame]
Paul Bakker8123e9d2011-01-06 15:37:30 +00001/**
Paul Bakkerfae35f02013-03-13 10:33:51 +01002 * \file cipher_wrap.c
Paul Bakker9af723c2014-05-01 13:03:14 +02003 *
Gilles Peskinef08ca832023-09-12 19:21:54 +02004 * \brief Generic cipher wrapper for Mbed TLS
Paul Bakker8123e9d2011-01-06 15:37:30 +00005 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
7 *
Bence Szépkúti1e148272020-08-07 13:07:28 +02008 * Copyright The Mbed TLS Contributors
Dave Rodgman7ff79652023-11-03 12:04:52 +00009 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Paul Bakker8123e9d2011-01-06 15:37:30 +000010 */
11
Gilles Peskinedb09ef62020-06-03 01:43:33 +020012#include "common.h"
Paul Bakker8123e9d2011-01-06 15:37:30 +000013
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020014#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000015
Manuel Pégourié-Gonnard50518f42015-05-26 11:04:15 +020016#include "mbedtls/cipher_internal.h"
Janos Follath24eed8d2019-11-22 13:21:35 +000017#include "mbedtls/error.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000018
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +020019#if defined(MBEDTLS_CHACHAPOLY_C)
20#include "mbedtls/chachapoly.h"
Daniel King8fe47012016-05-17 20:33:28 -030021#endif
22
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020023#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000024#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000025#endif
26
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020027#if defined(MBEDTLS_ARC4_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000028#include "mbedtls/arc4.h"
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +020029#endif
30
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020031#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000032#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000033#endif
34
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000035#if defined(MBEDTLS_ARIA_C)
36#include "mbedtls/aria.h"
37#endif
38
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020039#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000040#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000041#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000042
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020043#if defined(MBEDTLS_BLOWFISH_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000044#include "mbedtls/blowfish.h"
Paul Bakker6132d0a2012-07-04 17:10:40 +000045#endif
46
Daniel Kingbd920622016-05-15 19:56:20 -030047#if defined(MBEDTLS_CHACHA20_C)
48#include "mbedtls/chacha20.h"
49#endif
50
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020051#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000052#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020053#endif
54
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000056#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020057#endif
58
Jack Lloydffdf2882019-03-07 17:00:32 -050059#if defined(MBEDTLS_NIST_KW_C)
60#include "mbedtls/nist_kw.h"
61#endif
62
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020063#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000064#include <string.h>
65#endif
66
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000067#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020068
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020069#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020070/* shared by all GCM ciphers */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010071static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020072{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010073 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020074
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010075 if (ctx != NULL) {
76 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
77 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020078
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010079 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020080}
81
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010082static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020083{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010084 mbedtls_gcm_free(ctx);
85 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020086}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020087#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020088
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020089#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020090/* shared by all CCM ciphers */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010091static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020092{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010093 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020094
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010095 if (ctx != NULL) {
96 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
97 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020098
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010099 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200100}
101
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100102static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200103{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100104 mbedtls_ccm_free(ctx);
105 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200106}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200107#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200108
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200109#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000110
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100111static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
112 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200113{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100114 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200115}
116
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200117#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100118static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
119 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000120{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100121 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
122 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000123}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200124#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000125
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200126#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100127static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
128 size_t length, size_t *iv_off, unsigned char *iv,
129 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000130{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100131 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
132 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000133}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200134#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000135
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100136#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100137static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
138 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100139{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100140 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
141 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100142}
143#endif /* MBEDTLS_CIPHER_MODE_OFB */
144
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200145#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100146static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
147 unsigned char *nonce_counter, unsigned char *stream_block,
148 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000149{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100150 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
151 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000152}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200153#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000154
Jaeden Ameroc6539902018-04-30 17:17:41 +0100155#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100156static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
157 size_t length,
158 const unsigned char data_unit[16],
159 const unsigned char *input,
160 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100161{
162 mbedtls_aes_xts_context *xts_ctx = ctx;
163 int mode;
164
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100165 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100166 case MBEDTLS_ENCRYPT:
167 mode = MBEDTLS_AES_ENCRYPT;
168 break;
169 case MBEDTLS_DECRYPT:
170 mode = MBEDTLS_AES_DECRYPT;
171 break;
172 default:
173 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
174 }
175
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100176 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
177 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100178}
179#endif /* MBEDTLS_CIPHER_MODE_XTS */
180
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100181static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
182 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000183{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100184 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000185}
186
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100187static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
188 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000189{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100190 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000191}
192
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100193static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000194{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100195 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200196
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100197 if (aes == NULL) {
198 return NULL;
199 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200200
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100201 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200202
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100203 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000204}
205
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100206static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000207{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100208 mbedtls_aes_free((mbedtls_aes_context *) ctx);
209 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000210}
211
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200212static const mbedtls_cipher_base_t aes_info = {
213 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200214 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200215#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000216 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100217#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200218#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000219 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100220#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100221#if defined(MBEDTLS_CIPHER_MODE_OFB)
222 aes_crypt_ofb_wrap,
223#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200224#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000225 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100226#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100227#if defined(MBEDTLS_CIPHER_MODE_XTS)
228 NULL,
229#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200230#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200231 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100232#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000233 aes_setkey_enc_wrap,
234 aes_setkey_dec_wrap,
235 aes_ctx_alloc,
236 aes_ctx_free
237};
238
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200239static const mbedtls_cipher_info_t aes_128_ecb_info = {
240 MBEDTLS_CIPHER_AES_128_ECB,
241 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200242 128,
243 "AES-128-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300244 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200245 0,
246 16,
247 &aes_info
248};
249
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200250static const mbedtls_cipher_info_t aes_192_ecb_info = {
251 MBEDTLS_CIPHER_AES_192_ECB,
252 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200253 192,
254 "AES-192-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300255 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200256 0,
257 16,
258 &aes_info
259};
260
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200261static const mbedtls_cipher_info_t aes_256_ecb_info = {
262 MBEDTLS_CIPHER_AES_256_ECB,
263 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200264 256,
265 "AES-256-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300266 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200267 0,
268 16,
269 &aes_info
270};
271
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200272#if defined(MBEDTLS_CIPHER_MODE_CBC)
273static const mbedtls_cipher_info_t aes_128_cbc_info = {
274 MBEDTLS_CIPHER_AES_128_CBC,
275 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000276 128,
277 "AES-128-CBC",
278 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200279 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000280 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000281 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000282};
283
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200284static const mbedtls_cipher_info_t aes_192_cbc_info = {
285 MBEDTLS_CIPHER_AES_192_CBC,
286 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000287 192,
288 "AES-192-CBC",
289 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200290 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000291 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000292 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000293};
294
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200295static const mbedtls_cipher_info_t aes_256_cbc_info = {
296 MBEDTLS_CIPHER_AES_256_CBC,
297 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000298 256,
299 "AES-256-CBC",
300 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200301 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000302 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000303 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000304};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200305#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000306
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200307#if defined(MBEDTLS_CIPHER_MODE_CFB)
308static const mbedtls_cipher_info_t aes_128_cfb128_info = {
309 MBEDTLS_CIPHER_AES_128_CFB128,
310 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000311 128,
312 "AES-128-CFB128",
313 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200314 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000315 16,
316 &aes_info
317};
318
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200319static const mbedtls_cipher_info_t aes_192_cfb128_info = {
320 MBEDTLS_CIPHER_AES_192_CFB128,
321 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000322 192,
323 "AES-192-CFB128",
324 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200325 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000326 16,
327 &aes_info
328};
329
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200330static const mbedtls_cipher_info_t aes_256_cfb128_info = {
331 MBEDTLS_CIPHER_AES_256_CFB128,
332 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000333 256,
334 "AES-256-CFB128",
335 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200336 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000337 16,
338 &aes_info
339};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200340#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000341
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100342#if defined(MBEDTLS_CIPHER_MODE_OFB)
343static const mbedtls_cipher_info_t aes_128_ofb_info = {
344 MBEDTLS_CIPHER_AES_128_OFB,
345 MBEDTLS_MODE_OFB,
346 128,
347 "AES-128-OFB",
348 16,
349 0,
350 16,
351 &aes_info
352};
353
354static const mbedtls_cipher_info_t aes_192_ofb_info = {
355 MBEDTLS_CIPHER_AES_192_OFB,
356 MBEDTLS_MODE_OFB,
357 192,
358 "AES-192-OFB",
359 16,
360 0,
361 16,
362 &aes_info
363};
364
365static const mbedtls_cipher_info_t aes_256_ofb_info = {
366 MBEDTLS_CIPHER_AES_256_OFB,
367 MBEDTLS_MODE_OFB,
368 256,
369 "AES-256-OFB",
370 16,
371 0,
372 16,
373 &aes_info
374};
375#endif /* MBEDTLS_CIPHER_MODE_OFB */
376
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200377#if defined(MBEDTLS_CIPHER_MODE_CTR)
378static const mbedtls_cipher_info_t aes_128_ctr_info = {
379 MBEDTLS_CIPHER_AES_128_CTR,
380 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000381 128,
382 "AES-128-CTR",
383 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200384 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000385 16,
386 &aes_info
387};
388
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200389static const mbedtls_cipher_info_t aes_192_ctr_info = {
390 MBEDTLS_CIPHER_AES_192_CTR,
391 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000392 192,
393 "AES-192-CTR",
394 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200395 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000396 16,
397 &aes_info
398};
399
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200400static const mbedtls_cipher_info_t aes_256_ctr_info = {
401 MBEDTLS_CIPHER_AES_256_CTR,
402 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000403 256,
404 "AES-256-CTR",
405 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200406 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000407 16,
408 &aes_info
409};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200410#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000411
Jaeden Ameroc6539902018-04-30 17:17:41 +0100412#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100413static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
414 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100415{
416 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100417 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100418}
419
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100420static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
421 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100422{
423 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100424 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100425}
426
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100427static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100428{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100429 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100430
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100431 if (xts_ctx != NULL) {
432 mbedtls_aes_xts_init(xts_ctx);
433 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100434
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100435 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100436}
437
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100438static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100439{
440 mbedtls_aes_xts_context *xts_ctx = ctx;
441
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100442 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100443 return;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100444 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100445
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100446 mbedtls_aes_xts_free(xts_ctx);
447 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100448}
449
450static const mbedtls_cipher_base_t xts_aes_info = {
451 MBEDTLS_CIPHER_ID_AES,
452 NULL,
453#if defined(MBEDTLS_CIPHER_MODE_CBC)
454 NULL,
455#endif
456#if defined(MBEDTLS_CIPHER_MODE_CFB)
457 NULL,
458#endif
459#if defined(MBEDTLS_CIPHER_MODE_OFB)
460 NULL,
461#endif
462#if defined(MBEDTLS_CIPHER_MODE_CTR)
463 NULL,
464#endif
465#if defined(MBEDTLS_CIPHER_MODE_XTS)
466 aes_crypt_xts_wrap,
467#endif
468#if defined(MBEDTLS_CIPHER_MODE_STREAM)
469 NULL,
470#endif
471 xts_aes_setkey_enc_wrap,
472 xts_aes_setkey_dec_wrap,
473 xts_aes_ctx_alloc,
474 xts_aes_ctx_free
475};
476
477static const mbedtls_cipher_info_t aes_128_xts_info = {
478 MBEDTLS_CIPHER_AES_128_XTS,
479 MBEDTLS_MODE_XTS,
480 256,
481 "AES-128-XTS",
482 16,
483 0,
484 16,
485 &xts_aes_info
486};
487
488static const mbedtls_cipher_info_t aes_256_xts_info = {
489 MBEDTLS_CIPHER_AES_256_XTS,
490 MBEDTLS_MODE_XTS,
491 512,
492 "AES-256-XTS",
493 16,
494 0,
495 16,
496 &xts_aes_info
497};
498#endif /* MBEDTLS_CIPHER_MODE_XTS */
499
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200500#if defined(MBEDTLS_GCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100501static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
502 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200503{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100504 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
505 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200506}
507
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200508static const mbedtls_cipher_base_t gcm_aes_info = {
509 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200510 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200511#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200512 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100513#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200514#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200515 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100516#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100517#if defined(MBEDTLS_CIPHER_MODE_OFB)
518 NULL,
519#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200520#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200521 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100522#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100523#if defined(MBEDTLS_CIPHER_MODE_XTS)
524 NULL,
525#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200526#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200527 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100528#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200529 gcm_aes_setkey_wrap,
530 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200531 gcm_ctx_alloc,
532 gcm_ctx_free,
533};
534
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200535static const mbedtls_cipher_info_t aes_128_gcm_info = {
536 MBEDTLS_CIPHER_AES_128_GCM,
537 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100538 128,
539 "AES-128-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200540 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200541 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100542 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200543 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100544};
545
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200546static const mbedtls_cipher_info_t aes_192_gcm_info = {
547 MBEDTLS_CIPHER_AES_192_GCM,
548 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200549 192,
550 "AES-192-GCM",
551 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200552 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200553 16,
554 &gcm_aes_info
555};
556
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200557static const mbedtls_cipher_info_t aes_256_gcm_info = {
558 MBEDTLS_CIPHER_AES_256_GCM,
559 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100560 256,
561 "AES-256-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200562 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200563 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100564 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200565 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100566};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200567#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100568
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200569#if defined(MBEDTLS_CCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100570static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
571 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200572{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100573 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
574 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200575}
576
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200577static const mbedtls_cipher_base_t ccm_aes_info = {
578 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200579 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200580#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200581 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100582#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200583#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200584 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100585#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100586#if defined(MBEDTLS_CIPHER_MODE_OFB)
587 NULL,
588#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200589#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200590 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100591#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100592#if defined(MBEDTLS_CIPHER_MODE_XTS)
593 NULL,
594#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200595#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200596 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100597#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200598 ccm_aes_setkey_wrap,
599 ccm_aes_setkey_wrap,
600 ccm_ctx_alloc,
601 ccm_ctx_free,
602};
603
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200604static const mbedtls_cipher_info_t aes_128_ccm_info = {
605 MBEDTLS_CIPHER_AES_128_CCM,
606 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200607 128,
608 "AES-128-CCM",
609 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200610 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200611 16,
612 &ccm_aes_info
613};
614
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200615static const mbedtls_cipher_info_t aes_192_ccm_info = {
616 MBEDTLS_CIPHER_AES_192_CCM,
617 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200618 192,
619 "AES-192-CCM",
620 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200621 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200622 16,
623 &ccm_aes_info
624};
625
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200626static const mbedtls_cipher_info_t aes_256_ccm_info = {
627 MBEDTLS_CIPHER_AES_256_CCM,
628 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200629 256,
630 "AES-256-CCM",
631 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200632 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200633 16,
634 &ccm_aes_info
635};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200636#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200637
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200638#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000639
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200640#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000641
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100642static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
643 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200644{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100645 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
646 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200647}
648
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200649#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100650static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
651 size_t length, unsigned char *iv,
652 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000653{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100654 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
655 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000656}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200657#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000658
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200659#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100660static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
661 size_t length, size_t *iv_off, unsigned char *iv,
662 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000663{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100664 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
665 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000666}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200667#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000668
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200669#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100670static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
671 unsigned char *nonce_counter, unsigned char *stream_block,
672 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000673{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100674 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
675 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000676}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200677#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000678
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100679static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
680 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000681{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100682 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000683}
684
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100685static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
686 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000687{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100688 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000689}
690
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100691static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000692{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200693 mbedtls_camellia_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100694 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200695
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100696 if (ctx == NULL) {
697 return NULL;
698 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200699
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100700 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200701
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100702 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000703}
704
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100705static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000706{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100707 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
708 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000709}
710
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200711static const mbedtls_cipher_base_t camellia_info = {
712 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200713 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200714#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000715 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100716#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200717#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000718 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100719#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100720#if defined(MBEDTLS_CIPHER_MODE_OFB)
721 NULL,
722#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200723#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000724 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100725#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100726#if defined(MBEDTLS_CIPHER_MODE_XTS)
727 NULL,
728#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200729#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200730 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100731#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000732 camellia_setkey_enc_wrap,
733 camellia_setkey_dec_wrap,
734 camellia_ctx_alloc,
735 camellia_ctx_free
736};
737
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200738static const mbedtls_cipher_info_t camellia_128_ecb_info = {
739 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
740 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200741 128,
742 "CAMELLIA-128-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100743 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200744 0,
745 16,
746 &camellia_info
747};
748
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200749static const mbedtls_cipher_info_t camellia_192_ecb_info = {
750 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
751 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200752 192,
753 "CAMELLIA-192-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100754 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200755 0,
756 16,
757 &camellia_info
758};
759
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200760static const mbedtls_cipher_info_t camellia_256_ecb_info = {
761 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
762 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200763 256,
764 "CAMELLIA-256-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100765 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200766 0,
767 16,
768 &camellia_info
769};
770
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200771#if defined(MBEDTLS_CIPHER_MODE_CBC)
772static const mbedtls_cipher_info_t camellia_128_cbc_info = {
773 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
774 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000775 128,
776 "CAMELLIA-128-CBC",
777 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200778 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000779 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000780 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000781};
782
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200783static const mbedtls_cipher_info_t camellia_192_cbc_info = {
784 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
785 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000786 192,
787 "CAMELLIA-192-CBC",
788 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200789 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000790 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000791 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000792};
793
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200794static const mbedtls_cipher_info_t camellia_256_cbc_info = {
795 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
796 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000797 256,
798 "CAMELLIA-256-CBC",
799 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200800 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000801 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000802 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000803};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200804#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000805
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200806#if defined(MBEDTLS_CIPHER_MODE_CFB)
807static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
808 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
809 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000810 128,
811 "CAMELLIA-128-CFB128",
812 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200813 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000814 16,
815 &camellia_info
816};
817
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200818static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
819 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
820 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000821 192,
822 "CAMELLIA-192-CFB128",
823 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200824 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000825 16,
826 &camellia_info
827};
828
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200829static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
830 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
831 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000832 256,
833 "CAMELLIA-256-CFB128",
834 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200835 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000836 16,
837 &camellia_info
838};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200839#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000840
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200841#if defined(MBEDTLS_CIPHER_MODE_CTR)
842static const mbedtls_cipher_info_t camellia_128_ctr_info = {
843 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
844 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000845 128,
846 "CAMELLIA-128-CTR",
847 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200848 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000849 16,
850 &camellia_info
851};
852
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200853static const mbedtls_cipher_info_t camellia_192_ctr_info = {
854 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
855 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000856 192,
857 "CAMELLIA-192-CTR",
858 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200859 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000860 16,
861 &camellia_info
862};
863
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200864static const mbedtls_cipher_info_t camellia_256_ctr_info = {
865 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
866 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000867 256,
868 "CAMELLIA-256-CTR",
869 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200870 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000871 16,
872 &camellia_info
873};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200874#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000875
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200876#if defined(MBEDTLS_GCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100877static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
878 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200879{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100880 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
881 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200882}
883
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200884static const mbedtls_cipher_base_t gcm_camellia_info = {
885 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200886 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200887#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200888 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100889#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200890#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200891 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100892#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100893#if defined(MBEDTLS_CIPHER_MODE_OFB)
894 NULL,
895#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200896#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200897 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100898#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100899#if defined(MBEDTLS_CIPHER_MODE_XTS)
900 NULL,
901#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200902#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200903 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100904#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200905 gcm_camellia_setkey_wrap,
906 gcm_camellia_setkey_wrap,
907 gcm_ctx_alloc,
908 gcm_ctx_free,
909};
910
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200911static const mbedtls_cipher_info_t camellia_128_gcm_info = {
912 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
913 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200914 128,
915 "CAMELLIA-128-GCM",
916 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200917 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200918 16,
919 &gcm_camellia_info
920};
921
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200922static const mbedtls_cipher_info_t camellia_192_gcm_info = {
923 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
924 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200925 192,
926 "CAMELLIA-192-GCM",
927 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200928 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200929 16,
930 &gcm_camellia_info
931};
932
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200933static const mbedtls_cipher_info_t camellia_256_gcm_info = {
934 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
935 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200936 256,
937 "CAMELLIA-256-GCM",
938 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200939 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200940 16,
941 &gcm_camellia_info
942};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200943#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200944
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200945#if defined(MBEDTLS_CCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100946static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
947 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200948{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100949 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
950 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200951}
952
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200953static const mbedtls_cipher_base_t ccm_camellia_info = {
954 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200955 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200956#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200957 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100958#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200959#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200960 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100961#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100962#if defined(MBEDTLS_CIPHER_MODE_OFB)
963 NULL,
964#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200965#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200966 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100967#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100968#if defined(MBEDTLS_CIPHER_MODE_XTS)
969 NULL,
970#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200971#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200972 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100973#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200974 ccm_camellia_setkey_wrap,
975 ccm_camellia_setkey_wrap,
976 ccm_ctx_alloc,
977 ccm_ctx_free,
978};
979
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200980static const mbedtls_cipher_info_t camellia_128_ccm_info = {
981 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
982 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200983 128,
984 "CAMELLIA-128-CCM",
985 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200986 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200987 16,
988 &ccm_camellia_info
989};
990
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200991static const mbedtls_cipher_info_t camellia_192_ccm_info = {
992 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
993 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200994 192,
995 "CAMELLIA-192-CCM",
996 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200997 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200998 16,
999 &ccm_camellia_info
1000};
1001
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001002static const mbedtls_cipher_info_t camellia_256_ccm_info = {
1003 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
1004 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001005 256,
1006 "CAMELLIA-256-CCM",
1007 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001008 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001009 16,
1010 &ccm_camellia_info
1011};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001012#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001013
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001014#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001015
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001016#if defined(MBEDTLS_ARIA_C)
1017
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001018static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1019 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001020{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001021 (void) operation;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001022 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1023 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001024}
1025
1026#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001027static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1028 size_t length, unsigned char *iv,
1029 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001030{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001031 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1032 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001033}
1034#endif /* MBEDTLS_CIPHER_MODE_CBC */
1035
1036#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001037static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1038 size_t length, size_t *iv_off, unsigned char *iv,
1039 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001040{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001041 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1042 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001043}
1044#endif /* MBEDTLS_CIPHER_MODE_CFB */
1045
1046#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001047static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1048 unsigned char *nonce_counter, unsigned char *stream_block,
1049 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001050{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001051 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1052 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001053}
1054#endif /* MBEDTLS_CIPHER_MODE_CTR */
1055
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001056static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1057 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001058{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001059 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001060}
1061
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001062static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1063 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001064{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001065 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001066}
1067
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001068static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001069{
1070 mbedtls_aria_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001071 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001072
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001073 if (ctx == NULL) {
1074 return NULL;
1075 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001076
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001077 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001078
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001079 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001080}
1081
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001082static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001083{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001084 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1085 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001086}
1087
1088static const mbedtls_cipher_base_t aria_info = {
1089 MBEDTLS_CIPHER_ID_ARIA,
1090 aria_crypt_ecb_wrap,
1091#if defined(MBEDTLS_CIPHER_MODE_CBC)
1092 aria_crypt_cbc_wrap,
1093#endif
1094#if defined(MBEDTLS_CIPHER_MODE_CFB)
1095 aria_crypt_cfb128_wrap,
1096#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001097#if defined(MBEDTLS_CIPHER_MODE_OFB)
1098 NULL,
1099#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001100#if defined(MBEDTLS_CIPHER_MODE_CTR)
1101 aria_crypt_ctr_wrap,
1102#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001103#if defined(MBEDTLS_CIPHER_MODE_XTS)
1104 NULL,
1105#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001106#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1107 NULL,
1108#endif
1109 aria_setkey_enc_wrap,
1110 aria_setkey_dec_wrap,
1111 aria_ctx_alloc,
1112 aria_ctx_free
1113};
1114
1115static const mbedtls_cipher_info_t aria_128_ecb_info = {
1116 MBEDTLS_CIPHER_ARIA_128_ECB,
1117 MBEDTLS_MODE_ECB,
1118 128,
1119 "ARIA-128-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001120 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001121 0,
1122 16,
1123 &aria_info
1124};
1125
1126static const mbedtls_cipher_info_t aria_192_ecb_info = {
1127 MBEDTLS_CIPHER_ARIA_192_ECB,
1128 MBEDTLS_MODE_ECB,
1129 192,
1130 "ARIA-192-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001131 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001132 0,
1133 16,
1134 &aria_info
1135};
1136
1137static const mbedtls_cipher_info_t aria_256_ecb_info = {
1138 MBEDTLS_CIPHER_ARIA_256_ECB,
1139 MBEDTLS_MODE_ECB,
1140 256,
1141 "ARIA-256-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001142 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001143 0,
1144 16,
1145 &aria_info
1146};
1147
1148#if defined(MBEDTLS_CIPHER_MODE_CBC)
1149static const mbedtls_cipher_info_t aria_128_cbc_info = {
1150 MBEDTLS_CIPHER_ARIA_128_CBC,
1151 MBEDTLS_MODE_CBC,
1152 128,
1153 "ARIA-128-CBC",
1154 16,
1155 0,
1156 16,
1157 &aria_info
1158};
1159
1160static const mbedtls_cipher_info_t aria_192_cbc_info = {
1161 MBEDTLS_CIPHER_ARIA_192_CBC,
1162 MBEDTLS_MODE_CBC,
1163 192,
1164 "ARIA-192-CBC",
1165 16,
1166 0,
1167 16,
1168 &aria_info
1169};
1170
1171static const mbedtls_cipher_info_t aria_256_cbc_info = {
1172 MBEDTLS_CIPHER_ARIA_256_CBC,
1173 MBEDTLS_MODE_CBC,
1174 256,
1175 "ARIA-256-CBC",
1176 16,
1177 0,
1178 16,
1179 &aria_info
1180};
1181#endif /* MBEDTLS_CIPHER_MODE_CBC */
1182
1183#if defined(MBEDTLS_CIPHER_MODE_CFB)
1184static const mbedtls_cipher_info_t aria_128_cfb128_info = {
1185 MBEDTLS_CIPHER_ARIA_128_CFB128,
1186 MBEDTLS_MODE_CFB,
1187 128,
1188 "ARIA-128-CFB128",
1189 16,
1190 0,
1191 16,
1192 &aria_info
1193};
1194
1195static const mbedtls_cipher_info_t aria_192_cfb128_info = {
1196 MBEDTLS_CIPHER_ARIA_192_CFB128,
1197 MBEDTLS_MODE_CFB,
1198 192,
1199 "ARIA-192-CFB128",
1200 16,
1201 0,
1202 16,
1203 &aria_info
1204};
1205
1206static const mbedtls_cipher_info_t aria_256_cfb128_info = {
1207 MBEDTLS_CIPHER_ARIA_256_CFB128,
1208 MBEDTLS_MODE_CFB,
1209 256,
1210 "ARIA-256-CFB128",
1211 16,
1212 0,
1213 16,
1214 &aria_info
1215};
1216#endif /* MBEDTLS_CIPHER_MODE_CFB */
1217
1218#if defined(MBEDTLS_CIPHER_MODE_CTR)
1219static const mbedtls_cipher_info_t aria_128_ctr_info = {
1220 MBEDTLS_CIPHER_ARIA_128_CTR,
1221 MBEDTLS_MODE_CTR,
1222 128,
1223 "ARIA-128-CTR",
1224 16,
1225 0,
1226 16,
1227 &aria_info
1228};
1229
1230static const mbedtls_cipher_info_t aria_192_ctr_info = {
1231 MBEDTLS_CIPHER_ARIA_192_CTR,
1232 MBEDTLS_MODE_CTR,
1233 192,
1234 "ARIA-192-CTR",
1235 16,
1236 0,
1237 16,
1238 &aria_info
1239};
1240
1241static const mbedtls_cipher_info_t aria_256_ctr_info = {
1242 MBEDTLS_CIPHER_ARIA_256_CTR,
1243 MBEDTLS_MODE_CTR,
1244 256,
1245 "ARIA-256-CTR",
1246 16,
1247 0,
1248 16,
1249 &aria_info
1250};
1251#endif /* MBEDTLS_CIPHER_MODE_CTR */
1252
1253#if defined(MBEDTLS_GCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001254static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1255 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001256{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001257 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1258 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001259}
1260
1261static const mbedtls_cipher_base_t gcm_aria_info = {
1262 MBEDTLS_CIPHER_ID_ARIA,
1263 NULL,
1264#if defined(MBEDTLS_CIPHER_MODE_CBC)
1265 NULL,
1266#endif
1267#if defined(MBEDTLS_CIPHER_MODE_CFB)
1268 NULL,
1269#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001270#if defined(MBEDTLS_CIPHER_MODE_OFB)
1271 NULL,
1272#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001273#if defined(MBEDTLS_CIPHER_MODE_CTR)
1274 NULL,
1275#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001276#if defined(MBEDTLS_CIPHER_MODE_XTS)
1277 NULL,
1278#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001279#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1280 NULL,
1281#endif
1282 gcm_aria_setkey_wrap,
1283 gcm_aria_setkey_wrap,
1284 gcm_ctx_alloc,
1285 gcm_ctx_free,
1286};
1287
1288static const mbedtls_cipher_info_t aria_128_gcm_info = {
1289 MBEDTLS_CIPHER_ARIA_128_GCM,
1290 MBEDTLS_MODE_GCM,
1291 128,
1292 "ARIA-128-GCM",
1293 12,
1294 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1295 16,
1296 &gcm_aria_info
1297};
1298
1299static const mbedtls_cipher_info_t aria_192_gcm_info = {
1300 MBEDTLS_CIPHER_ARIA_192_GCM,
1301 MBEDTLS_MODE_GCM,
1302 192,
1303 "ARIA-192-GCM",
1304 12,
1305 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1306 16,
1307 &gcm_aria_info
1308};
1309
1310static const mbedtls_cipher_info_t aria_256_gcm_info = {
1311 MBEDTLS_CIPHER_ARIA_256_GCM,
1312 MBEDTLS_MODE_GCM,
1313 256,
1314 "ARIA-256-GCM",
1315 12,
1316 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1317 16,
1318 &gcm_aria_info
1319};
1320#endif /* MBEDTLS_GCM_C */
1321
1322#if defined(MBEDTLS_CCM_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001323static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1324 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001325{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001326 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1327 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001328}
1329
1330static const mbedtls_cipher_base_t ccm_aria_info = {
1331 MBEDTLS_CIPHER_ID_ARIA,
1332 NULL,
1333#if defined(MBEDTLS_CIPHER_MODE_CBC)
1334 NULL,
1335#endif
1336#if defined(MBEDTLS_CIPHER_MODE_CFB)
1337 NULL,
1338#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001339#if defined(MBEDTLS_CIPHER_MODE_OFB)
1340 NULL,
1341#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001342#if defined(MBEDTLS_CIPHER_MODE_CTR)
1343 NULL,
1344#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001345#if defined(MBEDTLS_CIPHER_MODE_XTS)
1346 NULL,
1347#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001348#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1349 NULL,
1350#endif
1351 ccm_aria_setkey_wrap,
1352 ccm_aria_setkey_wrap,
1353 ccm_ctx_alloc,
1354 ccm_ctx_free,
1355};
1356
1357static const mbedtls_cipher_info_t aria_128_ccm_info = {
1358 MBEDTLS_CIPHER_ARIA_128_CCM,
1359 MBEDTLS_MODE_CCM,
1360 128,
1361 "ARIA-128-CCM",
1362 12,
1363 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1364 16,
1365 &ccm_aria_info
1366};
1367
1368static const mbedtls_cipher_info_t aria_192_ccm_info = {
1369 MBEDTLS_CIPHER_ARIA_192_CCM,
1370 MBEDTLS_MODE_CCM,
1371 192,
1372 "ARIA-192-CCM",
1373 12,
1374 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1375 16,
1376 &ccm_aria_info
1377};
1378
1379static const mbedtls_cipher_info_t aria_256_ccm_info = {
1380 MBEDTLS_CIPHER_ARIA_256_CCM,
1381 MBEDTLS_MODE_CCM,
1382 256,
1383 "ARIA-256-CCM",
1384 12,
1385 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1386 16,
1387 &ccm_aria_info
1388};
1389#endif /* MBEDTLS_CCM_C */
1390
1391#endif /* MBEDTLS_ARIA_C */
1392
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001393#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001394
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001395static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1396 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001397{
1398 ((void) operation);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001399 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001400}
1401
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001402static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1403 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001404{
1405 ((void) operation);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001406 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001407}
1408
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001409#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001410static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1411 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001412{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001413 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1414 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001415}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001416#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001417
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001418#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001419static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1420 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001421{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001422 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1423 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001424}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001425#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001426
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001427static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1428 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001429{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001430 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001431
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001432 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001433}
1434
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001435static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1436 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001437{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001438 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001439
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001440 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001441}
1442
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001443static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1444 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001445{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001446 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001447
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001448 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001449}
1450
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001451static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1452 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001453{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001454 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001455
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001456 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001457}
1458
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001459static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1460 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001461{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001462 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001463
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001464 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001465}
1466
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001467static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1468 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001469{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001470 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001471
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001472 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001473}
1474
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001475static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001476{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001477 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001478
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001479 if (des == NULL) {
1480 return NULL;
1481 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001482
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001483 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001484
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001485 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001486}
1487
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001488static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001489{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001490 mbedtls_des_free((mbedtls_des_context *) ctx);
1491 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001492}
1493
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001494static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001495{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001496 mbedtls_des3_context *des3;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001497 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001498
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001499 if (des3 == NULL) {
1500 return NULL;
1501 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001502
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001503 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001504
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001505 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001506}
1507
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001508static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001509{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001510 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1511 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001512}
1513
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001514static const mbedtls_cipher_base_t des_info = {
1515 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001516 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001517#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001518 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001519#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001520#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001521 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001522#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001523#if defined(MBEDTLS_CIPHER_MODE_OFB)
1524 NULL,
1525#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001526#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001527 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001528#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001529#if defined(MBEDTLS_CIPHER_MODE_XTS)
1530 NULL,
1531#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001532#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001533 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001534#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001535 des_setkey_enc_wrap,
1536 des_setkey_dec_wrap,
1537 des_ctx_alloc,
1538 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001539};
1540
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001541static const mbedtls_cipher_info_t des_ecb_info = {
1542 MBEDTLS_CIPHER_DES_ECB,
1543 MBEDTLS_MODE_ECB,
1544 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001545 "DES-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001546 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001547 0,
1548 8,
1549 &des_info
1550};
1551
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001552#if defined(MBEDTLS_CIPHER_MODE_CBC)
1553static const mbedtls_cipher_info_t des_cbc_info = {
1554 MBEDTLS_CIPHER_DES_CBC,
1555 MBEDTLS_MODE_CBC,
1556 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker343a8702011-06-09 14:27:58 +00001557 "DES-CBC",
1558 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001559 0,
Paul Bakker343a8702011-06-09 14:27:58 +00001560 8,
1561 &des_info
1562};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001563#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001564
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001565static const mbedtls_cipher_base_t des_ede_info = {
1566 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001567 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001568#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001569 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001570#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001571#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001572 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001573#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001574#if defined(MBEDTLS_CIPHER_MODE_OFB)
1575 NULL,
1576#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001577#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001578 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001579#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001580#if defined(MBEDTLS_CIPHER_MODE_XTS)
1581 NULL,
1582#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001583#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001584 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001585#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001586 des3_set2key_enc_wrap,
1587 des3_set2key_dec_wrap,
1588 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001589 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001590};
1591
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001592static const mbedtls_cipher_info_t des_ede_ecb_info = {
1593 MBEDTLS_CIPHER_DES_EDE_ECB,
1594 MBEDTLS_MODE_ECB,
1595 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001596 "DES-EDE-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001597 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001598 0,
1599 8,
1600 &des_ede_info
1601};
1602
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001603#if defined(MBEDTLS_CIPHER_MODE_CBC)
1604static const mbedtls_cipher_info_t des_ede_cbc_info = {
1605 MBEDTLS_CIPHER_DES_EDE_CBC,
1606 MBEDTLS_MODE_CBC,
1607 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker343a8702011-06-09 14:27:58 +00001608 "DES-EDE-CBC",
Paul Bakker0e342352013-06-24 19:33:02 +02001609 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001610 0,
Paul Bakker0e342352013-06-24 19:33:02 +02001611 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001612 &des_ede_info
1613};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001614#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001615
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001616static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001617 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001618 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001619#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001620 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001621#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001622#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001623 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001624#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001625#if defined(MBEDTLS_CIPHER_MODE_OFB)
1626 NULL,
1627#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001628#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001629 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001630#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001631#if defined(MBEDTLS_CIPHER_MODE_XTS)
1632 NULL,
1633#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001634#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001635 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001636#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001637 des3_set3key_enc_wrap,
1638 des3_set3key_dec_wrap,
1639 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001640 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001641};
1642
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001643static const mbedtls_cipher_info_t des_ede3_ecb_info = {
1644 MBEDTLS_CIPHER_DES_EDE3_ECB,
1645 MBEDTLS_MODE_ECB,
1646 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001647 "DES-EDE3-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001648 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001649 0,
1650 8,
1651 &des_ede3_info
1652};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001653#if defined(MBEDTLS_CIPHER_MODE_CBC)
1654static const mbedtls_cipher_info_t des_ede3_cbc_info = {
1655 MBEDTLS_CIPHER_DES_EDE3_CBC,
1656 MBEDTLS_MODE_CBC,
1657 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker23986e52011-04-24 08:57:21 +00001658 "DES-EDE3-CBC",
1659 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001660 0,
Paul Bakker23986e52011-04-24 08:57:21 +00001661 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001662 &des_ede3_info
Paul Bakker8123e9d2011-01-06 15:37:30 +00001663};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001664#endif /* MBEDTLS_CIPHER_MODE_CBC */
1665#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001666
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001667#if defined(MBEDTLS_BLOWFISH_C)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001668
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001669static int blowfish_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1670 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001671{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001672 return mbedtls_blowfish_crypt_ecb((mbedtls_blowfish_context *) ctx, operation, input,
1673 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001674}
1675
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001676#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001677static int blowfish_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1678 size_t length, unsigned char *iv, const unsigned char *input,
1679 unsigned char *output)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001680{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001681 return mbedtls_blowfish_crypt_cbc((mbedtls_blowfish_context *) ctx, operation, length, iv,
1682 input, output);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001683}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001684#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001685
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001686#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001687static int blowfish_crypt_cfb64_wrap(void *ctx, mbedtls_operation_t operation,
1688 size_t length, size_t *iv_off, unsigned char *iv,
1689 const unsigned char *input, unsigned char *output)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001690{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001691 return mbedtls_blowfish_crypt_cfb64((mbedtls_blowfish_context *) ctx, operation, length,
1692 iv_off, iv, input, output);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001693}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001694#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001695
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001696#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001697static int blowfish_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1698 unsigned char *nonce_counter, unsigned char *stream_block,
1699 const unsigned char *input, unsigned char *output)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001700{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001701 return mbedtls_blowfish_crypt_ctr((mbedtls_blowfish_context *) ctx, length, nc_off,
1702 nonce_counter, stream_block, input, output);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001703}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001704#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001705
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001706static int blowfish_setkey_wrap(void *ctx, const unsigned char *key,
1707 unsigned int key_bitlen)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001708{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001709 return mbedtls_blowfish_setkey((mbedtls_blowfish_context *) ctx, key, key_bitlen);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001710}
1711
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001712static void *blowfish_ctx_alloc(void)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001713{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001714 mbedtls_blowfish_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001715 ctx = mbedtls_calloc(1, sizeof(mbedtls_blowfish_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001716
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001717 if (ctx == NULL) {
1718 return NULL;
1719 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001720
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001721 mbedtls_blowfish_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001722
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001723 return ctx;
Paul Bakker6132d0a2012-07-04 17:10:40 +00001724}
1725
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001726static void blowfish_ctx_free(void *ctx)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001727{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001728 mbedtls_blowfish_free((mbedtls_blowfish_context *) ctx);
1729 mbedtls_free(ctx);
Paul Bakker6132d0a2012-07-04 17:10:40 +00001730}
1731
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001732static const mbedtls_cipher_base_t blowfish_info = {
1733 MBEDTLS_CIPHER_ID_BLOWFISH,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001734 blowfish_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001735#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001736 blowfish_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001737#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001738#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001739 blowfish_crypt_cfb64_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001740#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001741#if defined(MBEDTLS_CIPHER_MODE_OFB)
1742 NULL,
1743#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001744#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001745 blowfish_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001746#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001747#if defined(MBEDTLS_CIPHER_MODE_XTS)
1748 NULL,
1749#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001750#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001751 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001752#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001753 blowfish_setkey_wrap,
1754 blowfish_setkey_wrap,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001755 blowfish_ctx_alloc,
1756 blowfish_ctx_free
1757};
1758
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001759static const mbedtls_cipher_info_t blowfish_ecb_info = {
1760 MBEDTLS_CIPHER_BLOWFISH_ECB,
1761 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001762 128,
1763 "BLOWFISH-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001764 0,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001765 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001766 8,
1767 &blowfish_info
1768};
1769
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001770#if defined(MBEDTLS_CIPHER_MODE_CBC)
1771static const mbedtls_cipher_info_t blowfish_cbc_info = {
1772 MBEDTLS_CIPHER_BLOWFISH_CBC,
1773 MBEDTLS_MODE_CBC,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001774 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001775 "BLOWFISH-CBC",
1776 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001777 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001778 8,
1779 &blowfish_info
1780};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001781#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001782
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001783#if defined(MBEDTLS_CIPHER_MODE_CFB)
1784static const mbedtls_cipher_info_t blowfish_cfb64_info = {
1785 MBEDTLS_CIPHER_BLOWFISH_CFB64,
1786 MBEDTLS_MODE_CFB,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001787 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001788 "BLOWFISH-CFB64",
1789 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001790 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001791 8,
1792 &blowfish_info
1793};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001794#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001795
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001796#if defined(MBEDTLS_CIPHER_MODE_CTR)
1797static const mbedtls_cipher_info_t blowfish_ctr_info = {
1798 MBEDTLS_CIPHER_BLOWFISH_CTR,
1799 MBEDTLS_MODE_CTR,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001800 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001801 "BLOWFISH-CTR",
1802 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001803 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001804 8,
1805 &blowfish_info
1806};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001807#endif /* MBEDTLS_CIPHER_MODE_CTR */
1808#endif /* MBEDTLS_BLOWFISH_C */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001809
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001810#if defined(MBEDTLS_ARC4_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001811static int arc4_crypt_stream_wrap(void *ctx, size_t length,
1812 const unsigned char *input,
1813 unsigned char *output)
Paul Bakker68884e32013-01-07 18:20:04 +01001814{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001815 return mbedtls_arc4_crypt((mbedtls_arc4_context *) ctx, length, input, output);
Paul Bakker68884e32013-01-07 18:20:04 +01001816}
1817
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001818static int arc4_setkey_wrap(void *ctx, const unsigned char *key,
1819 unsigned int key_bitlen)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001820{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001821 /* we get key_bitlen in bits, arc4 expects it in bytes */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001822 if (key_bitlen % 8 != 0) {
1823 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1824 }
Manuel Pégourié-Gonnardce411252013-09-04 12:28:37 +02001825
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001826 mbedtls_arc4_setup((mbedtls_arc4_context *) ctx, key, key_bitlen / 8);
1827 return 0;
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001828}
1829
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001830static void *arc4_ctx_alloc(void)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001831{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001832 mbedtls_arc4_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001833 ctx = mbedtls_calloc(1, sizeof(mbedtls_arc4_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001834
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001835 if (ctx == NULL) {
1836 return NULL;
1837 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001838
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001839 mbedtls_arc4_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001840
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001841 return ctx;
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001842}
Paul Bakker68884e32013-01-07 18:20:04 +01001843
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001844static void arc4_ctx_free(void *ctx)
Paul Bakker68884e32013-01-07 18:20:04 +01001845{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001846 mbedtls_arc4_free((mbedtls_arc4_context *) ctx);
1847 mbedtls_free(ctx);
Paul Bakker68884e32013-01-07 18:20:04 +01001848}
1849
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001850static const mbedtls_cipher_base_t arc4_base_info = {
1851 MBEDTLS_CIPHER_ID_ARC4,
Paul Bakker68884e32013-01-07 18:20:04 +01001852 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001853#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker68884e32013-01-07 18:20:04 +01001854 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001855#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001856#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker68884e32013-01-07 18:20:04 +01001857 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001858#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001859#if defined(MBEDTLS_CIPHER_MODE_OFB)
1860 NULL,
1861#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001862#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001863 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001864#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001865#if defined(MBEDTLS_CIPHER_MODE_XTS)
1866 NULL,
1867#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001868#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001869 arc4_crypt_stream_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001870#endif
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001871 arc4_setkey_wrap,
1872 arc4_setkey_wrap,
Paul Bakker68884e32013-01-07 18:20:04 +01001873 arc4_ctx_alloc,
1874 arc4_ctx_free
1875};
1876
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001877static const mbedtls_cipher_info_t arc4_128_info = {
1878 MBEDTLS_CIPHER_ARC4_128,
1879 MBEDTLS_MODE_STREAM,
Paul Bakker68884e32013-01-07 18:20:04 +01001880 128,
1881 "ARC4-128",
1882 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001883 0,
Paul Bakker68884e32013-01-07 18:20:04 +01001884 1,
1885 &arc4_base_info
1886};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001887#endif /* MBEDTLS_ARC4_C */
Paul Bakker68884e32013-01-07 18:20:04 +01001888
Daniel Kingbd920622016-05-15 19:56:20 -03001889#if defined(MBEDTLS_CHACHA20_C)
1890
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001891static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1892 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001893{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001894 if (key_bitlen != 256U) {
1895 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1896 }
Daniel Kingbd920622016-05-15 19:56:20 -03001897
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001898 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1899 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1900 }
Daniel Kingbd920622016-05-15 19:56:20 -03001901
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001902 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001903}
1904
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001905static int chacha20_stream_wrap(void *ctx, size_t length,
1906 const unsigned char *input,
1907 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001908{
Janos Follath24eed8d2019-11-22 13:21:35 +00001909 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001910
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001911 ret = mbedtls_chacha20_update(ctx, length, input, output);
1912 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1913 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1914 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001915
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001916 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001917}
1918
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001919static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001920{
1921 mbedtls_chacha20_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001922 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001923
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001924 if (ctx == NULL) {
1925 return NULL;
1926 }
Daniel Kingbd920622016-05-15 19:56:20 -03001927
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001928 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001929
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001930 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001931}
1932
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001933static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001934{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001935 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1936 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001937}
1938
1939static const mbedtls_cipher_base_t chacha20_base_info = {
1940 MBEDTLS_CIPHER_ID_CHACHA20,
1941 NULL,
1942#if defined(MBEDTLS_CIPHER_MODE_CBC)
1943 NULL,
1944#endif
1945#if defined(MBEDTLS_CIPHER_MODE_CFB)
1946 NULL,
1947#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001948#if defined(MBEDTLS_CIPHER_MODE_OFB)
1949 NULL,
1950#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001951#if defined(MBEDTLS_CIPHER_MODE_CTR)
1952 NULL,
1953#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001954#if defined(MBEDTLS_CIPHER_MODE_XTS)
1955 NULL,
1956#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001957#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001958 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001959#endif
1960 chacha20_setkey_wrap,
1961 chacha20_setkey_wrap,
1962 chacha20_ctx_alloc,
1963 chacha20_ctx_free
1964};
1965static const mbedtls_cipher_info_t chacha20_info = {
1966 MBEDTLS_CIPHER_CHACHA20,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001967 MBEDTLS_MODE_STREAM,
Daniel Kingbd920622016-05-15 19:56:20 -03001968 256,
1969 "CHACHA20",
1970 12,
1971 0,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001972 1,
Daniel Kingbd920622016-05-15 19:56:20 -03001973 &chacha20_base_info
1974};
1975#endif /* MBEDTLS_CHACHA20_C */
1976
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001977#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001978
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001979static int chachapoly_setkey_wrap(void *ctx,
1980 const unsigned char *key,
1981 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001982{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001983 if (key_bitlen != 256U) {
1984 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1985 }
Daniel King8fe47012016-05-17 20:33:28 -03001986
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001987 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1988 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1989 }
Daniel King8fe47012016-05-17 20:33:28 -03001990
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001991 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001992}
1993
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001994static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001995{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001996 mbedtls_chachapoly_context *ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001997 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001998
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01001999 if (ctx == NULL) {
2000 return NULL;
2001 }
Daniel King8fe47012016-05-17 20:33:28 -03002002
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002003 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03002004
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002005 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03002006}
2007
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002008static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03002009{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002010 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
2011 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03002012}
2013
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002014static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03002015 MBEDTLS_CIPHER_ID_CHACHA20,
2016 NULL,
2017#if defined(MBEDTLS_CIPHER_MODE_CBC)
2018 NULL,
2019#endif
2020#if defined(MBEDTLS_CIPHER_MODE_CFB)
2021 NULL,
2022#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002023#if defined(MBEDTLS_CIPHER_MODE_OFB)
2024 NULL,
2025#endif
Daniel King8fe47012016-05-17 20:33:28 -03002026#if defined(MBEDTLS_CIPHER_MODE_CTR)
2027 NULL,
2028#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02002029#if defined(MBEDTLS_CIPHER_MODE_XTS)
2030 NULL,
2031#endif
Daniel King8fe47012016-05-17 20:33:28 -03002032#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2033 NULL,
2034#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002035 chachapoly_setkey_wrap,
2036 chachapoly_setkey_wrap,
2037 chachapoly_ctx_alloc,
2038 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03002039};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002040static const mbedtls_cipher_info_t chachapoly_info = {
Daniel King8fe47012016-05-17 20:33:28 -03002041 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Manuel Pégourié-Gonnardf57bf8b2018-06-18 11:14:09 +02002042 MBEDTLS_MODE_CHACHAPOLY,
Daniel King8fe47012016-05-17 20:33:28 -03002043 256,
2044 "CHACHA20-POLY1305",
2045 12,
2046 0,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02002047 1,
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002048 &chachapoly_base_info
Daniel King8fe47012016-05-17 20:33:28 -03002049};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002050#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03002051
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002052#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002053static int null_crypt_stream(void *ctx, size_t length,
2054 const unsigned char *input,
2055 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002056{
2057 ((void) ctx);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002058 memmove(output, input, length);
2059 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002060}
2061
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002062static int null_setkey(void *ctx, const unsigned char *key,
2063 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002064{
2065 ((void) ctx);
2066 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002067 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002068
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002069 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002070}
2071
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002072static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002073{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002074 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002075}
2076
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002077static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002078{
2079 ((void) ctx);
2080}
2081
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002082static const mbedtls_cipher_base_t null_base_info = {
2083 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002084 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002085#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002086 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002087#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002088#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002089 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002090#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002091#if defined(MBEDTLS_CIPHER_MODE_OFB)
2092 NULL,
2093#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002094#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002095 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002096#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002097#if defined(MBEDTLS_CIPHER_MODE_XTS)
2098 NULL,
2099#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002100#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002101 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002102#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002103 null_setkey,
2104 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002105 null_ctx_alloc,
2106 null_ctx_free
2107};
2108
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002109static const mbedtls_cipher_info_t null_cipher_info = {
2110 MBEDTLS_CIPHER_NULL,
2111 MBEDTLS_MODE_STREAM,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002112 0,
2113 "NULL",
Paul Bakker68884e32013-01-07 18:20:04 +01002114 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002115 0,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002116 1,
2117 &null_base_info
2118};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002119#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002120
Jack Lloydffdf2882019-03-07 17:00:32 -05002121#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002122static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002123{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002124 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002125
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002126 if (ctx != NULL) {
2127 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2128 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002129
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002130 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002131}
2132
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002133static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002134{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002135 mbedtls_nist_kw_free(ctx);
2136 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002137}
2138
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002139static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2140 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002141{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002142 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2143 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002144}
2145
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002146static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2147 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002148{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002149 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2150 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002151}
2152
2153static const mbedtls_cipher_base_t kw_aes_info = {
2154 MBEDTLS_CIPHER_ID_AES,
2155 NULL,
2156#if defined(MBEDTLS_CIPHER_MODE_CBC)
2157 NULL,
2158#endif
2159#if defined(MBEDTLS_CIPHER_MODE_CFB)
2160 NULL,
2161#endif
2162#if defined(MBEDTLS_CIPHER_MODE_OFB)
2163 NULL,
2164#endif
2165#if defined(MBEDTLS_CIPHER_MODE_CTR)
2166 NULL,
2167#endif
2168#if defined(MBEDTLS_CIPHER_MODE_XTS)
2169 NULL,
2170#endif
2171#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2172 NULL,
2173#endif
2174 kw_aes_setkey_wrap,
2175 kw_aes_setkey_unwrap,
2176 kw_ctx_alloc,
2177 kw_ctx_free,
2178};
2179
2180static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
2181 MBEDTLS_CIPHER_AES_128_KW,
2182 MBEDTLS_MODE_KW,
2183 128,
2184 "AES-128-KW",
2185 0,
2186 0,
2187 16,
2188 &kw_aes_info
2189};
2190
2191static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
2192 MBEDTLS_CIPHER_AES_192_KW,
2193 MBEDTLS_MODE_KW,
2194 192,
2195 "AES-192-KW",
2196 0,
2197 0,
2198 16,
2199 &kw_aes_info
2200};
2201
2202static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
2203 MBEDTLS_CIPHER_AES_256_KW,
2204 MBEDTLS_MODE_KW,
2205 256,
2206 "AES-256-KW",
2207 0,
2208 0,
2209 16,
2210 &kw_aes_info
2211};
2212
2213static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
2214 MBEDTLS_CIPHER_AES_128_KWP,
2215 MBEDTLS_MODE_KWP,
2216 128,
2217 "AES-128-KWP",
2218 0,
2219 0,
2220 16,
2221 &kw_aes_info
2222};
2223
2224static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
2225 MBEDTLS_CIPHER_AES_192_KWP,
2226 MBEDTLS_MODE_KWP,
2227 192,
2228 "AES-192-KWP",
2229 0,
2230 0,
2231 16,
2232 &kw_aes_info
2233};
2234
2235static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
2236 MBEDTLS_CIPHER_AES_256_KWP,
2237 MBEDTLS_MODE_KWP,
2238 256,
2239 "AES-256-KWP",
2240 0,
2241 0,
2242 16,
2243 &kw_aes_info
2244};
2245#endif /* MBEDTLS_NIST_KW_C */
2246
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002247const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002248{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002249#if defined(MBEDTLS_AES_C)
2250 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2251 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2252 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2253#if defined(MBEDTLS_CIPHER_MODE_CBC)
2254 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2255 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2256 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002257#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002258#if defined(MBEDTLS_CIPHER_MODE_CFB)
2259 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2260 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2261 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002262#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002263#if defined(MBEDTLS_CIPHER_MODE_OFB)
2264 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2265 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2266 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2267#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002268#if defined(MBEDTLS_CIPHER_MODE_CTR)
2269 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2270 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2271 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002272#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002273#if defined(MBEDTLS_CIPHER_MODE_XTS)
2274 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2275 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2276#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002277#if defined(MBEDTLS_GCM_C)
2278 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2279 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2280 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002281#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002282#if defined(MBEDTLS_CCM_C)
2283 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2284 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2285 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002286#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002287#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002288
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002289#if defined(MBEDTLS_ARC4_C)
2290 { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002291#endif
2292
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002293#if defined(MBEDTLS_BLOWFISH_C)
2294 { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info },
2295#if defined(MBEDTLS_CIPHER_MODE_CBC)
2296 { MBEDTLS_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002297#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002298#if defined(MBEDTLS_CIPHER_MODE_CFB)
2299 { MBEDTLS_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002300#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002301#if defined(MBEDTLS_CIPHER_MODE_CTR)
2302 { MBEDTLS_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002303#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002304#endif /* MBEDTLS_BLOWFISH_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002305
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002306#if defined(MBEDTLS_CAMELLIA_C)
2307 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2308 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2309 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2310#if defined(MBEDTLS_CIPHER_MODE_CBC)
2311 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2312 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2313 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002314#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002315#if defined(MBEDTLS_CIPHER_MODE_CFB)
2316 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2317 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2318 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002319#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002320#if defined(MBEDTLS_CIPHER_MODE_CTR)
2321 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2322 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2323 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002324#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002325#if defined(MBEDTLS_GCM_C)
2326 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2327 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2328 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002329#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002330#if defined(MBEDTLS_CCM_C)
2331 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2332 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2333 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002334#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002335#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002336
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002337#if defined(MBEDTLS_ARIA_C)
2338 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2339 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2340 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2341#if defined(MBEDTLS_CIPHER_MODE_CBC)
2342 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2343 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2344 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2345#endif
2346#if defined(MBEDTLS_CIPHER_MODE_CFB)
2347 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2348 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2349 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2350#endif
2351#if defined(MBEDTLS_CIPHER_MODE_CTR)
2352 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2353 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2354 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2355#endif
2356#if defined(MBEDTLS_GCM_C)
2357 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2358 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2359 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2360#endif
2361#if defined(MBEDTLS_CCM_C)
2362 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2363 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2364 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
2365#endif
2366#endif /* MBEDTLS_ARIA_C */
2367
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002368#if defined(MBEDTLS_DES_C)
2369 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2370 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2371 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2372#if defined(MBEDTLS_CIPHER_MODE_CBC)
2373 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2374 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2375 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002376#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002377#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002378
Daniel Kingbd920622016-05-15 19:56:20 -03002379#if defined(MBEDTLS_CHACHA20_C)
2380 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2381#endif
2382
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002383#if defined(MBEDTLS_CHACHAPOLY_C)
2384 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002385#endif
2386
Jack Lloydffdf2882019-03-07 17:00:32 -05002387#if defined(MBEDTLS_NIST_KW_C)
2388 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2389 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2390 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2391 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2392 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2393 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2394#endif
2395
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002396#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2397 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2398#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002399
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002400 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002401};
2402
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01002403#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2404 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002405int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002406
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002407#endif /* MBEDTLS_CIPHER_C */