blob: 7e12de6302e246a6870c62e7528191c31d70158a [file] [log] [blame]
Paul Bakker8123e9d2011-01-06 15:37:30 +00001/**
Paul Bakkerfae35f02013-03-13 10:33:51 +01002 * \file cipher_wrap.c
Paul Bakker9af723c2014-05-01 13:03:14 +02003 *
Gilles Peskinee820c0a2023-08-03 17:45:20 +02004 * \brief Generic cipher wrapper for Mbed TLS
Paul Bakker8123e9d2011-01-06 15:37:30 +00005 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
7 *
Bence Szépkúti1e148272020-08-07 13:07:28 +02008 * Copyright The Mbed TLS Contributors
Dave Rodgmane3c05852023-11-03 12:21:36 +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
Chris Jonesdaacb592021-03-09 17:03:29 +000016#include "cipher_wrap.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_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000028#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000029#endif
30
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000031#if defined(MBEDTLS_ARIA_C)
32#include "mbedtls/aria.h"
33#endif
34
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000036#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000037#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000038
Daniel Kingbd920622016-05-15 19:56:20 -030039#if defined(MBEDTLS_CHACHA20_C)
40#include "mbedtls/chacha20.h"
41#endif
42
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020043#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000044#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020045#endif
46
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000048#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020049#endif
50
Jack Lloydffdf2882019-03-07 17:00:32 -050051#if defined(MBEDTLS_NIST_KW_C)
52#include "mbedtls/nist_kw.h"
53#endif
54
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000056#include <string.h>
57#endif
58
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000059#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020060
Dave Rodgman25d77cb2023-06-24 22:58:51 +010061enum mbedtls_cipher_base_index {
62#if defined(MBEDTLS_AES_C)
63 MBEDTLS_CIPHER_BASE_INDEX_AES,
64#endif
65#if defined(MBEDTLS_ARIA_C)
66 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
67#endif
68#if defined(MBEDTLS_CAMELLIA_C)
69 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
70#endif
71#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
72 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
73#endif
74#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
75 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
76#endif
77#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
78 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
79#endif
80#if defined(MBEDTLS_CHACHA20_C)
81 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
82#endif
83#if defined(MBEDTLS_CHACHAPOLY_C)
84 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
85#endif
86#if defined(MBEDTLS_DES_C)
87 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
88#endif
89#if defined(MBEDTLS_DES_C)
90 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
91#endif
92#if defined(MBEDTLS_DES_C)
93 MBEDTLS_CIPHER_BASE_INDEX_DES,
94#endif
95#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
96 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
97#endif
98#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
99 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
100#endif
101#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
102 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
103#endif
104#if defined(MBEDTLS_NIST_KW_C)
105 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
106#endif
107#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
108 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
109#endif
110#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100111 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100112#endif
Dave Rodgman0b7bf872023-08-14 14:25:29 +0100113 /* Prevent compile failure due to empty enum */
Dave Rodgmane3330f82023-08-14 15:26:28 +0100114 MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
Dave Rodgman25d77cb2023-06-24 22:58:51 +0100115};
Dave Rodgmande3de772023-06-24 12:51:06 +0100116
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200117#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200118/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100119static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200120{
Gilles Peskine449bd832023-01-11 14:50:10 +0100121 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200122
Gilles Peskine449bd832023-01-11 14:50:10 +0100123 if (ctx != NULL) {
124 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
125 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200126
Gilles Peskine449bd832023-01-11 14:50:10 +0100127 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200128}
129
Gilles Peskine449bd832023-01-11 14:50:10 +0100130static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200131{
Gilles Peskine449bd832023-01-11 14:50:10 +0100132 mbedtls_gcm_free(ctx);
133 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200134}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200135#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200136
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200137#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200138/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100139static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200140{
Gilles Peskine449bd832023-01-11 14:50:10 +0100141 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200142
Gilles Peskine449bd832023-01-11 14:50:10 +0100143 if (ctx != NULL) {
144 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
145 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200146
Gilles Peskine449bd832023-01-11 14:50:10 +0100147 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200148}
149
Gilles Peskine449bd832023-01-11 14:50:10 +0100150static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200151{
Gilles Peskine449bd832023-01-11 14:50:10 +0100152 mbedtls_ccm_free(ctx);
153 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200154}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200155#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200156
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200157#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000158
Gilles Peskine449bd832023-01-11 14:50:10 +0100159static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
160 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200161{
Gilles Peskine449bd832023-01-11 14:50:10 +0100162 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200163}
164
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200165#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100166static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
167 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000168{
Gilles Peskine449bd832023-01-11 14:50:10 +0100169 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
170 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000171}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200172#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000173
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200174#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100175static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
176 size_t length, size_t *iv_off, unsigned char *iv,
177 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000178{
Gilles Peskine449bd832023-01-11 14:50:10 +0100179 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
180 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000181}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200182#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000183
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100184#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100185static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
186 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100187{
Gilles Peskine449bd832023-01-11 14:50:10 +0100188 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
189 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100190}
191#endif /* MBEDTLS_CIPHER_MODE_OFB */
192
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200193#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100194static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
195 unsigned char *nonce_counter, unsigned char *stream_block,
196 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000197{
Gilles Peskine449bd832023-01-11 14:50:10 +0100198 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
199 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000200}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200201#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000202
Jaeden Ameroc6539902018-04-30 17:17:41 +0100203#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100204static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
205 size_t length,
206 const unsigned char data_unit[16],
207 const unsigned char *input,
208 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100209{
210 mbedtls_aes_xts_context *xts_ctx = ctx;
211 int mode;
212
Gilles Peskine449bd832023-01-11 14:50:10 +0100213 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100214 case MBEDTLS_ENCRYPT:
215 mode = MBEDTLS_AES_ENCRYPT;
216 break;
217 case MBEDTLS_DECRYPT:
218 mode = MBEDTLS_AES_DECRYPT;
219 break;
220 default:
221 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
222 }
223
Gilles Peskine449bd832023-01-11 14:50:10 +0100224 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
225 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100226}
227#endif /* MBEDTLS_CIPHER_MODE_XTS */
228
Gilles Peskine449bd832023-01-11 14:50:10 +0100229static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
230 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000231{
Gilles Peskine449bd832023-01-11 14:50:10 +0100232 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000233}
234
Gilles Peskine449bd832023-01-11 14:50:10 +0100235static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
236 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000237{
Gilles Peskine449bd832023-01-11 14:50:10 +0100238 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000239}
240
Gilles Peskine449bd832023-01-11 14:50:10 +0100241static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000242{
Gilles Peskine449bd832023-01-11 14:50:10 +0100243 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200244
Gilles Peskine449bd832023-01-11 14:50:10 +0100245 if (aes == NULL) {
246 return NULL;
247 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200248
Gilles Peskine449bd832023-01-11 14:50:10 +0100249 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200250
Gilles Peskine449bd832023-01-11 14:50:10 +0100251 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000252}
253
Gilles Peskine449bd832023-01-11 14:50:10 +0100254static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000255{
Gilles Peskine449bd832023-01-11 14:50:10 +0100256 mbedtls_aes_free((mbedtls_aes_context *) ctx);
257 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000258}
259
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200260static const mbedtls_cipher_base_t aes_info = {
261 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200262 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200263#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000264 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100265#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200266#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000267 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100268#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100269#if defined(MBEDTLS_CIPHER_MODE_OFB)
270 aes_crypt_ofb_wrap,
271#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200272#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000273 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100274#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100275#if defined(MBEDTLS_CIPHER_MODE_XTS)
276 NULL,
277#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200278#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200279 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100280#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000281 aes_setkey_enc_wrap,
282 aes_setkey_dec_wrap,
283 aes_ctx_alloc,
284 aes_ctx_free
285};
286
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200287static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100288 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100289 16,
290 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100291 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100292 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100293 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200294 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100295 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200296};
297
Yanray Wang7732ced2023-09-14 13:51:14 +0800298#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200299static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100300 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100301 16,
302 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100303 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100304 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100305 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200306 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100307 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200308};
309
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200310static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100311 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100312 16,
313 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100314 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100315 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100316 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200317 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100318 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200319};
Yanray Wang7732ced2023-09-14 13:51:14 +0800320#endif
Paul Bakker5e0efa72013-09-08 23:04:04 +0200321
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200322#if defined(MBEDTLS_CIPHER_MODE_CBC)
323static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100324 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100325 16,
326 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100327 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100328 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100329 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200330 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100331 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000332};
333
Yanray Wang7732ced2023-09-14 13:51:14 +0800334#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200335static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100336 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100337 16,
338 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100339 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100340 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100341 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200342 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100343 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000344};
345
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200346static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100347 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100348 16,
349 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100350 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100351 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100352 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200353 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100354 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000355};
Yanray Wang7732ced2023-09-14 13:51:14 +0800356#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200357#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000358
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200359#if defined(MBEDTLS_CIPHER_MODE_CFB)
360static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100361 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100362 16,
363 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100364 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100365 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100366 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200367 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100368 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000369};
370
Yanray Wang7732ced2023-09-14 13:51:14 +0800371#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200372static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100373 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100374 16,
375 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100376 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100377 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100378 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200379 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100380 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000381};
382
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200383static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100384 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100385 16,
386 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100387 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100388 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100389 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200390 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100391 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000392};
Yanray Wang7732ced2023-09-14 13:51:14 +0800393#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200394#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000395
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100396#if defined(MBEDTLS_CIPHER_MODE_OFB)
397static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100398 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100399 16,
400 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100401 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100402 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100403 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100404 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100405 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100406};
407
Yanray Wang7732ced2023-09-14 13:51:14 +0800408#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100409static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100410 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100411 16,
412 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100413 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100414 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100415 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100416 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100417 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100418};
419
420static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100421 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100422 16,
423 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100424 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100425 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100426 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100427 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100428 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100429};
Yanray Wang7732ced2023-09-14 13:51:14 +0800430#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100431#endif /* MBEDTLS_CIPHER_MODE_OFB */
432
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200433#if defined(MBEDTLS_CIPHER_MODE_CTR)
434static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100435 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100436 16,
437 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100438 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100439 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100440 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200441 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100442 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000443};
444
Yanray Wang7732ced2023-09-14 13:51:14 +0800445#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200446static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100447 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100448 16,
449 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100450 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100451 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100452 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200453 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100454 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000455};
456
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200457static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100458 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100459 16,
460 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100461 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100462 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100463 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200464 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100465 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000466};
Yanray Wang7732ced2023-09-14 13:51:14 +0800467#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200468#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000469
Jaeden Ameroc6539902018-04-30 17:17:41 +0100470#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100471static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
472 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100473{
474 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100475 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100476}
477
Gilles Peskine449bd832023-01-11 14:50:10 +0100478static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
479 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100480{
481 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100482 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100483}
484
Gilles Peskine449bd832023-01-11 14:50:10 +0100485static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100486{
Gilles Peskine449bd832023-01-11 14:50:10 +0100487 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100488
Gilles Peskine449bd832023-01-11 14:50:10 +0100489 if (xts_ctx != NULL) {
490 mbedtls_aes_xts_init(xts_ctx);
491 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100492
Gilles Peskine449bd832023-01-11 14:50:10 +0100493 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100494}
495
Gilles Peskine449bd832023-01-11 14:50:10 +0100496static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100497{
498 mbedtls_aes_xts_context *xts_ctx = ctx;
499
Gilles Peskine449bd832023-01-11 14:50:10 +0100500 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100501 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100502 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100503
Gilles Peskine449bd832023-01-11 14:50:10 +0100504 mbedtls_aes_xts_free(xts_ctx);
505 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100506}
507
508static const mbedtls_cipher_base_t xts_aes_info = {
509 MBEDTLS_CIPHER_ID_AES,
510 NULL,
511#if defined(MBEDTLS_CIPHER_MODE_CBC)
512 NULL,
513#endif
514#if defined(MBEDTLS_CIPHER_MODE_CFB)
515 NULL,
516#endif
517#if defined(MBEDTLS_CIPHER_MODE_OFB)
518 NULL,
519#endif
520#if defined(MBEDTLS_CIPHER_MODE_CTR)
521 NULL,
522#endif
523#if defined(MBEDTLS_CIPHER_MODE_XTS)
524 aes_crypt_xts_wrap,
525#endif
526#if defined(MBEDTLS_CIPHER_MODE_STREAM)
527 NULL,
528#endif
529 xts_aes_setkey_enc_wrap,
530 xts_aes_setkey_dec_wrap,
531 xts_aes_ctx_alloc,
532 xts_aes_ctx_free
533};
534
535static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100536 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100537 16,
538 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100539 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100540 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100541 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100542 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100543 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100544};
545
Yanray Wang7732ced2023-09-14 13:51:14 +0800546#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100547static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100548 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100549 16,
550 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100551 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100552 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100553 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100554 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100555 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100556};
Yanray Wang7732ced2023-09-14 13:51:14 +0800557#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100558#endif /* MBEDTLS_CIPHER_MODE_XTS */
559
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200560#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100561static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
562 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200563{
Gilles Peskine449bd832023-01-11 14:50:10 +0100564 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
565 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200566}
567
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200568static const mbedtls_cipher_base_t gcm_aes_info = {
569 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200570 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200571#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200572 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100573#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200574#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200575 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100576#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100577#if defined(MBEDTLS_CIPHER_MODE_OFB)
578 NULL,
579#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200580#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200581 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100582#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100583#if defined(MBEDTLS_CIPHER_MODE_XTS)
584 NULL,
585#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200586#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200587 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100588#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200589 gcm_aes_setkey_wrap,
590 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200591 gcm_ctx_alloc,
592 gcm_ctx_free,
593};
594
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200595static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100596 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100597 16,
598 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100599 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100600 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100601 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200602 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100603 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100604};
605
Yanray Wang7732ced2023-09-14 13:51:14 +0800606#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200607static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100608 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100609 16,
610 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100611 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100612 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100613 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200614 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100615 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200616};
617
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200618static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100619 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100620 16,
621 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100622 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100623 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100624 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200625 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100626 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100627};
Yanray Wang7732ced2023-09-14 13:51:14 +0800628#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200629#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100630
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200631#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100632static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
633 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200634{
Gilles Peskine449bd832023-01-11 14:50:10 +0100635 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
636 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200637}
638
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200639static const mbedtls_cipher_base_t ccm_aes_info = {
640 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200641 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200642#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200643 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100644#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200645#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200646 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100647#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100648#if defined(MBEDTLS_CIPHER_MODE_OFB)
649 NULL,
650#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200651#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200652 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100653#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100654#if defined(MBEDTLS_CIPHER_MODE_XTS)
655 NULL,
656#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200657#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200658 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100659#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200660 ccm_aes_setkey_wrap,
661 ccm_aes_setkey_wrap,
662 ccm_ctx_alloc,
663 ccm_ctx_free,
664};
665
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200666static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100667 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100668 16,
669 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100670 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100671 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100672 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200673 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100674 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200675};
676
Yanray Wang7732ced2023-09-14 13:51:14 +0800677#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200678static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100679 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100680 16,
681 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100682 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100683 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100684 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200685 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100686 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200687};
688
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200689static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100690 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100691 16,
692 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100693 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100694 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100695 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200696 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100697 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200698};
Yanray Wang7732ced2023-09-14 13:51:14 +0800699#endif
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200700
701static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100702 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100703 16,
704 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100705 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100706 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100707 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200708 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100709 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200710};
711
Yanray Wang7732ced2023-09-14 13:51:14 +0800712#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200713static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100714 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100715 16,
716 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100717 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100718 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100719 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200720 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100721 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200722};
723
724static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100725 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100726 16,
727 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100728 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100729 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100730 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200731 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100732 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200733};
Yanray Wang7732ced2023-09-14 13:51:14 +0800734#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200735#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200736
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200737#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000738
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200739#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000740
Gilles Peskine449bd832023-01-11 14:50:10 +0100741static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
742 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200743{
Gilles Peskine449bd832023-01-11 14:50:10 +0100744 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
745 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200746}
747
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200748#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100749static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
750 size_t length, unsigned char *iv,
751 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000752{
Gilles Peskine449bd832023-01-11 14:50:10 +0100753 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
754 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000755}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200756#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000757
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200758#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100759static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
760 size_t length, size_t *iv_off, unsigned char *iv,
761 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000762{
Gilles Peskine449bd832023-01-11 14:50:10 +0100763 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
764 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000765}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200766#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000767
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200768#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100769static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
770 unsigned char *nonce_counter, unsigned char *stream_block,
771 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000772{
Gilles Peskine449bd832023-01-11 14:50:10 +0100773 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
774 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000775}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200776#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000777
Gilles Peskine449bd832023-01-11 14:50:10 +0100778static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
779 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000780{
Gilles Peskine449bd832023-01-11 14:50:10 +0100781 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000782}
783
Gilles Peskine449bd832023-01-11 14:50:10 +0100784static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
785 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000786{
Gilles Peskine449bd832023-01-11 14:50:10 +0100787 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000788}
789
Gilles Peskine449bd832023-01-11 14:50:10 +0100790static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000791{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200792 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100793 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200794
Gilles Peskine449bd832023-01-11 14:50:10 +0100795 if (ctx == NULL) {
796 return NULL;
797 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200798
Gilles Peskine449bd832023-01-11 14:50:10 +0100799 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200800
Gilles Peskine449bd832023-01-11 14:50:10 +0100801 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000802}
803
Gilles Peskine449bd832023-01-11 14:50:10 +0100804static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000805{
Gilles Peskine449bd832023-01-11 14:50:10 +0100806 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
807 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000808}
809
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200810static const mbedtls_cipher_base_t camellia_info = {
811 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200812 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200813#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000814 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100815#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200816#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000817 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100818#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100819#if defined(MBEDTLS_CIPHER_MODE_OFB)
820 NULL,
821#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200822#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000823 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100824#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100825#if defined(MBEDTLS_CIPHER_MODE_XTS)
826 NULL,
827#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200828#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200829 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100830#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000831 camellia_setkey_enc_wrap,
832 camellia_setkey_dec_wrap,
833 camellia_ctx_alloc,
834 camellia_ctx_free
835};
836
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200837static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100838 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100839 16,
840 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100841 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100842 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100843 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200844 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100845 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200846};
847
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200848static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100849 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100850 16,
851 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100852 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100853 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100854 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200855 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100856 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200857};
858
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200859static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100860 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100861 16,
862 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100863 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100864 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100865 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200866 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100867 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200868};
869
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200870#if defined(MBEDTLS_CIPHER_MODE_CBC)
871static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100872 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100873 16,
874 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100875 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100876 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100877 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200878 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100879 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000880};
881
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200882static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100883 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100884 16,
885 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100886 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100887 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100888 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200889 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100890 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000891};
892
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200893static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100894 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100895 16,
896 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100897 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100898 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100899 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200900 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100901 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000902};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200903#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000904
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200905#if defined(MBEDTLS_CIPHER_MODE_CFB)
906static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100907 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100908 16,
909 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100910 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100911 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100912 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200913 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100914 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000915};
916
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200917static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100918 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100919 16,
920 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100921 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100922 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100923 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200924 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100925 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000926};
927
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200928static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100929 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100930 16,
931 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100932 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100933 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100934 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200935 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100936 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000937};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200938#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000939
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200940#if defined(MBEDTLS_CIPHER_MODE_CTR)
941static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100942 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100943 16,
944 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100945 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100946 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100947 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200948 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100949 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000950};
951
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200952static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100953 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100954 16,
955 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100956 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100957 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100958 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200959 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100960 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000961};
962
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200963static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100964 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100965 16,
966 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100967 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100968 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100969 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200970 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100971 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000972};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200973#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000974
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200975#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100976static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
977 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200978{
Gilles Peskine449bd832023-01-11 14:50:10 +0100979 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
980 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200981}
982
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200983static const mbedtls_cipher_base_t gcm_camellia_info = {
984 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200985 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200986#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200987 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100988#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200989#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200990 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100991#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100992#if defined(MBEDTLS_CIPHER_MODE_OFB)
993 NULL,
994#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200995#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200996 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100997#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100998#if defined(MBEDTLS_CIPHER_MODE_XTS)
999 NULL,
1000#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001001#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001002 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001003#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001004 gcm_camellia_setkey_wrap,
1005 gcm_camellia_setkey_wrap,
1006 gcm_ctx_alloc,
1007 gcm_ctx_free,
1008};
1009
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001010static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001011 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001012 16,
1013 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001014 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001015 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001016 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001017 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001018 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001019};
1020
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001021static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001022 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001023 16,
1024 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001025 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001026 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001027 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001028 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001029 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001030};
1031
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001032static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001033 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001034 16,
1035 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001036 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001037 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001038 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001039 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001040 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001041};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001042#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001043
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001044#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001045static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1046 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001047{
Gilles Peskine449bd832023-01-11 14:50:10 +01001048 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1049 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001050}
1051
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001052static const mbedtls_cipher_base_t ccm_camellia_info = {
1053 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001054 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001055#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001056 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001057#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001058#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001059 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001060#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001061#if defined(MBEDTLS_CIPHER_MODE_OFB)
1062 NULL,
1063#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001064#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001065 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001066#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001067#if defined(MBEDTLS_CIPHER_MODE_XTS)
1068 NULL,
1069#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001070#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001071 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001072#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001073 ccm_camellia_setkey_wrap,
1074 ccm_camellia_setkey_wrap,
1075 ccm_ctx_alloc,
1076 ccm_ctx_free,
1077};
1078
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001079static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001080 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001081 16,
1082 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001083 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001084 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001085 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001086 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001087 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001088};
1089
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001090static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001091 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001092 16,
1093 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001094 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001095 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001096 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001097 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001098 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001099};
1100
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001101static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001102 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001103 16,
1104 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001105 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001106 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001107 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001108 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001109 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001110};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001111
1112static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001113 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001114 16,
1115 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001116 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001117 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001118 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001119 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001120 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001121};
1122
1123static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001124 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001125 16,
1126 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001127 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001128 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001129 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001130 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001131 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001132};
1133
1134static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001135 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001136 16,
1137 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001138 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001139 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001140 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001141 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001142 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001143};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001144#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001145
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001146#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001147
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001148#if defined(MBEDTLS_ARIA_C)
1149
Gilles Peskine449bd832023-01-11 14:50:10 +01001150static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1151 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001152{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001153 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001154 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1155 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001156}
1157
1158#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001159static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1160 size_t length, unsigned char *iv,
1161 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001162{
Gilles Peskine449bd832023-01-11 14:50:10 +01001163 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1164 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001165}
1166#endif /* MBEDTLS_CIPHER_MODE_CBC */
1167
1168#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001169static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1170 size_t length, size_t *iv_off, unsigned char *iv,
1171 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001172{
Gilles Peskine449bd832023-01-11 14:50:10 +01001173 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1174 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001175}
1176#endif /* MBEDTLS_CIPHER_MODE_CFB */
1177
1178#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001179static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1180 unsigned char *nonce_counter, unsigned char *stream_block,
1181 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001182{
Gilles Peskine449bd832023-01-11 14:50:10 +01001183 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1184 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001185}
1186#endif /* MBEDTLS_CIPHER_MODE_CTR */
1187
Gilles Peskine449bd832023-01-11 14:50:10 +01001188static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1189 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001190{
Gilles Peskine449bd832023-01-11 14:50:10 +01001191 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001192}
1193
Gilles Peskine449bd832023-01-11 14:50:10 +01001194static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1195 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001196{
Gilles Peskine449bd832023-01-11 14:50:10 +01001197 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001198}
1199
Gilles Peskine449bd832023-01-11 14:50:10 +01001200static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001201{
1202 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001203 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001204
Gilles Peskine449bd832023-01-11 14:50:10 +01001205 if (ctx == NULL) {
1206 return NULL;
1207 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001208
Gilles Peskine449bd832023-01-11 14:50:10 +01001209 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001210
Gilles Peskine449bd832023-01-11 14:50:10 +01001211 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001212}
1213
Gilles Peskine449bd832023-01-11 14:50:10 +01001214static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001215{
Gilles Peskine449bd832023-01-11 14:50:10 +01001216 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1217 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001218}
1219
1220static const mbedtls_cipher_base_t aria_info = {
1221 MBEDTLS_CIPHER_ID_ARIA,
1222 aria_crypt_ecb_wrap,
1223#if defined(MBEDTLS_CIPHER_MODE_CBC)
1224 aria_crypt_cbc_wrap,
1225#endif
1226#if defined(MBEDTLS_CIPHER_MODE_CFB)
1227 aria_crypt_cfb128_wrap,
1228#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001229#if defined(MBEDTLS_CIPHER_MODE_OFB)
1230 NULL,
1231#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001232#if defined(MBEDTLS_CIPHER_MODE_CTR)
1233 aria_crypt_ctr_wrap,
1234#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001235#if defined(MBEDTLS_CIPHER_MODE_XTS)
1236 NULL,
1237#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001238#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1239 NULL,
1240#endif
1241 aria_setkey_enc_wrap,
1242 aria_setkey_dec_wrap,
1243 aria_ctx_alloc,
1244 aria_ctx_free
1245};
1246
1247static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001248 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001249 16,
1250 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001251 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001252 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001253 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001254 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001255 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001256};
1257
1258static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001259 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001260 16,
1261 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001262 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001263 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001264 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001265 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001266 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001267};
1268
1269static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001270 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001271 16,
1272 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001273 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001274 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001275 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001276 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001277 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001278};
1279
1280#if defined(MBEDTLS_CIPHER_MODE_CBC)
1281static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001282 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001283 16,
1284 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001285 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001286 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001287 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001288 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001289 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001290};
1291
1292static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001293 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001294 16,
1295 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001296 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001297 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001298 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001299 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001300 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001301};
1302
1303static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001304 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001305 16,
1306 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001307 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001308 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001309 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001310 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001311 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001312};
1313#endif /* MBEDTLS_CIPHER_MODE_CBC */
1314
1315#if defined(MBEDTLS_CIPHER_MODE_CFB)
1316static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001317 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001318 16,
1319 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001320 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001321 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001322 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001323 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001324 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001325};
1326
1327static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001328 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001329 16,
1330 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001331 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001332 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001333 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001334 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001335 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001336};
1337
1338static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001339 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001340 16,
1341 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001342 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001343 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001344 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001345 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001346 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001347};
1348#endif /* MBEDTLS_CIPHER_MODE_CFB */
1349
1350#if defined(MBEDTLS_CIPHER_MODE_CTR)
1351static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001352 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001353 16,
1354 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001355 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001356 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001357 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001358 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001359 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001360};
1361
1362static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001363 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001364 16,
1365 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001366 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001367 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001368 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001369 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001370 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001371};
1372
1373static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001374 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001375 16,
1376 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001377 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001378 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001379 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001380 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001381 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001382};
1383#endif /* MBEDTLS_CIPHER_MODE_CTR */
1384
1385#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001386static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1387 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001388{
Gilles Peskine449bd832023-01-11 14:50:10 +01001389 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1390 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001391}
1392
1393static const mbedtls_cipher_base_t gcm_aria_info = {
1394 MBEDTLS_CIPHER_ID_ARIA,
1395 NULL,
1396#if defined(MBEDTLS_CIPHER_MODE_CBC)
1397 NULL,
1398#endif
1399#if defined(MBEDTLS_CIPHER_MODE_CFB)
1400 NULL,
1401#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001402#if defined(MBEDTLS_CIPHER_MODE_OFB)
1403 NULL,
1404#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001405#if defined(MBEDTLS_CIPHER_MODE_CTR)
1406 NULL,
1407#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001408#if defined(MBEDTLS_CIPHER_MODE_XTS)
1409 NULL,
1410#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001411#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1412 NULL,
1413#endif
1414 gcm_aria_setkey_wrap,
1415 gcm_aria_setkey_wrap,
1416 gcm_ctx_alloc,
1417 gcm_ctx_free,
1418};
1419
1420static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001421 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001422 16,
1423 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001424 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001425 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001426 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001427 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001428 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001429};
1430
1431static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001432 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001433 16,
1434 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001435 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001436 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001437 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001438 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001439 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001440};
1441
1442static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001443 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001444 16,
1445 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001446 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001447 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001448 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001449 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001450 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001451};
1452#endif /* MBEDTLS_GCM_C */
1453
1454#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001455static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1456 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001457{
Gilles Peskine449bd832023-01-11 14:50:10 +01001458 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1459 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001460}
1461
1462static const mbedtls_cipher_base_t ccm_aria_info = {
1463 MBEDTLS_CIPHER_ID_ARIA,
1464 NULL,
1465#if defined(MBEDTLS_CIPHER_MODE_CBC)
1466 NULL,
1467#endif
1468#if defined(MBEDTLS_CIPHER_MODE_CFB)
1469 NULL,
1470#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001471#if defined(MBEDTLS_CIPHER_MODE_OFB)
1472 NULL,
1473#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001474#if defined(MBEDTLS_CIPHER_MODE_CTR)
1475 NULL,
1476#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001477#if defined(MBEDTLS_CIPHER_MODE_XTS)
1478 NULL,
1479#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001480#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1481 NULL,
1482#endif
1483 ccm_aria_setkey_wrap,
1484 ccm_aria_setkey_wrap,
1485 ccm_ctx_alloc,
1486 ccm_ctx_free,
1487};
1488
1489static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001490 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001491 16,
1492 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001493 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001494 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001495 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001496 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001497 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001498};
1499
1500static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001501 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001502 16,
1503 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001504 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001505 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001506 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001507 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001508 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001509};
1510
1511static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001512 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001513 16,
1514 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001515 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001516 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001517 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001518 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001519 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001520};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001521
1522static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001523 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001524 16,
1525 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001526 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001527 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001528 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001529 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001530 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001531};
1532
1533static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001534 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001535 16,
1536 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001537 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001538 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001539 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001540 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001541 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001542};
1543
1544static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001545 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001546 16,
1547 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001548 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001549 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001550 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001551 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001552 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001553};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001554#endif /* MBEDTLS_CCM_C */
1555
1556#endif /* MBEDTLS_ARIA_C */
1557
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001558#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001559
Gilles Peskine449bd832023-01-11 14:50:10 +01001560static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1561 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001562{
1563 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001564 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001565}
1566
Gilles Peskine449bd832023-01-11 14:50:10 +01001567static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1568 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001569{
1570 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001571 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001572}
1573
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001574#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001575static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1576 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001577{
Gilles Peskine449bd832023-01-11 14:50:10 +01001578 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1579 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001580}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001581#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001582
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001583#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001584static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1585 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001586{
Gilles Peskine449bd832023-01-11 14:50:10 +01001587 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1588 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001589}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001590#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001591
Gilles Peskine449bd832023-01-11 14:50:10 +01001592static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1593 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001594{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001595 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001596
Gilles Peskine449bd832023-01-11 14:50:10 +01001597 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001598}
1599
Gilles Peskine449bd832023-01-11 14:50:10 +01001600static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1601 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001602{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001603 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001604
Gilles Peskine449bd832023-01-11 14:50:10 +01001605 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001606}
1607
Gilles Peskine449bd832023-01-11 14:50:10 +01001608static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1609 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001610{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001611 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001612
Gilles Peskine449bd832023-01-11 14:50:10 +01001613 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001614}
1615
Gilles Peskine449bd832023-01-11 14:50:10 +01001616static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1617 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001618{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001619 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001620
Gilles Peskine449bd832023-01-11 14:50:10 +01001621 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001622}
1623
Gilles Peskine449bd832023-01-11 14:50:10 +01001624static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1625 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001626{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001627 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001628
Gilles Peskine449bd832023-01-11 14:50:10 +01001629 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001630}
1631
Gilles Peskine449bd832023-01-11 14:50:10 +01001632static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1633 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001634{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001635 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001636
Gilles Peskine449bd832023-01-11 14:50:10 +01001637 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001638}
1639
Gilles Peskine449bd832023-01-11 14:50:10 +01001640static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001641{
Gilles Peskine449bd832023-01-11 14:50:10 +01001642 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001643
Gilles Peskine449bd832023-01-11 14:50:10 +01001644 if (des == NULL) {
1645 return NULL;
1646 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001647
Gilles Peskine449bd832023-01-11 14:50:10 +01001648 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001649
Gilles Peskine449bd832023-01-11 14:50:10 +01001650 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001651}
1652
Gilles Peskine449bd832023-01-11 14:50:10 +01001653static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001654{
Gilles Peskine449bd832023-01-11 14:50:10 +01001655 mbedtls_des_free((mbedtls_des_context *) ctx);
1656 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001657}
1658
Gilles Peskine449bd832023-01-11 14:50:10 +01001659static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001660{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001661 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001662 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001663
Gilles Peskine449bd832023-01-11 14:50:10 +01001664 if (des3 == NULL) {
1665 return NULL;
1666 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001667
Gilles Peskine449bd832023-01-11 14:50:10 +01001668 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001669
Gilles Peskine449bd832023-01-11 14:50:10 +01001670 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001671}
1672
Gilles Peskine449bd832023-01-11 14:50:10 +01001673static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001674{
Gilles Peskine449bd832023-01-11 14:50:10 +01001675 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1676 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001677}
1678
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001679static const mbedtls_cipher_base_t des_info = {
1680 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001681 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001682#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001683 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001684#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001685#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001686 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001687#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001688#if defined(MBEDTLS_CIPHER_MODE_OFB)
1689 NULL,
1690#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001691#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001692 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001693#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001694#if defined(MBEDTLS_CIPHER_MODE_XTS)
1695 NULL,
1696#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001697#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001698 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001699#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001700 des_setkey_enc_wrap,
1701 des_setkey_dec_wrap,
1702 des_ctx_alloc,
1703 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001704};
1705
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001706static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001707 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001708 8,
1709 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001710 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001711 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001712 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001713 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001714 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001715};
1716
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001717#if defined(MBEDTLS_CIPHER_MODE_CBC)
1718static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001719 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001720 8,
1721 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001722 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001723 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001724 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001725 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001726 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001727};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001728#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001729
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001730static const mbedtls_cipher_base_t des_ede_info = {
1731 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001732 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001733#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001734 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001735#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001736#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001737 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001738#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001739#if defined(MBEDTLS_CIPHER_MODE_OFB)
1740 NULL,
1741#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001742#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001743 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001744#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001745#if defined(MBEDTLS_CIPHER_MODE_XTS)
1746 NULL,
1747#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001748#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001749 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001750#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001751 des3_set2key_enc_wrap,
1752 des3_set2key_dec_wrap,
1753 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001754 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001755};
1756
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001757static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001758 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001759 8,
1760 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001761 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001762 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001763 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001764 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001765 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001766};
1767
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001768#if defined(MBEDTLS_CIPHER_MODE_CBC)
1769static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001770 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001771 8,
1772 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001773 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001774 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001775 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001776 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001777 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001778};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001779#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001780
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001781static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001782 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001783 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001784#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001785 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001786#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001787#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001788 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001789#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001790#if defined(MBEDTLS_CIPHER_MODE_OFB)
1791 NULL,
1792#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001793#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001794 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001795#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001796#if defined(MBEDTLS_CIPHER_MODE_XTS)
1797 NULL,
1798#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001799#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001800 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001801#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001802 des3_set3key_enc_wrap,
1803 des3_set3key_dec_wrap,
1804 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001805 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001806};
1807
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001808static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001809 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001810 8,
1811 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001812 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001813 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001814 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001815 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001816 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001817};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001818#if defined(MBEDTLS_CIPHER_MODE_CBC)
1819static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001820 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001821 8,
1822 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001823 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001824 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001825 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001826 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001827 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001828};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001829#endif /* MBEDTLS_CIPHER_MODE_CBC */
1830#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001831
Daniel Kingbd920622016-05-15 19:56:20 -03001832#if defined(MBEDTLS_CHACHA20_C)
1833
Gilles Peskine449bd832023-01-11 14:50:10 +01001834static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1835 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001836{
Gilles Peskine449bd832023-01-11 14:50:10 +01001837 if (key_bitlen != 256U) {
1838 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1839 }
Daniel Kingbd920622016-05-15 19:56:20 -03001840
Gilles Peskine449bd832023-01-11 14:50:10 +01001841 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1842 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1843 }
Daniel Kingbd920622016-05-15 19:56:20 -03001844
Gilles Peskine449bd832023-01-11 14:50:10 +01001845 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001846}
1847
Gilles Peskine449bd832023-01-11 14:50:10 +01001848static int chacha20_stream_wrap(void *ctx, size_t length,
1849 const unsigned char *input,
1850 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001851{
Janos Follath24eed8d2019-11-22 13:21:35 +00001852 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001853
Gilles Peskine449bd832023-01-11 14:50:10 +01001854 ret = mbedtls_chacha20_update(ctx, length, input, output);
1855 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1856 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1857 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001858
Gilles Peskine449bd832023-01-11 14:50:10 +01001859 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001860}
1861
Gilles Peskine449bd832023-01-11 14:50:10 +01001862static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001863{
1864 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001865 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001866
Gilles Peskine449bd832023-01-11 14:50:10 +01001867 if (ctx == NULL) {
1868 return NULL;
1869 }
Daniel Kingbd920622016-05-15 19:56:20 -03001870
Gilles Peskine449bd832023-01-11 14:50:10 +01001871 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001872
Gilles Peskine449bd832023-01-11 14:50:10 +01001873 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001874}
1875
Gilles Peskine449bd832023-01-11 14:50:10 +01001876static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001877{
Gilles Peskine449bd832023-01-11 14:50:10 +01001878 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1879 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001880}
1881
1882static const mbedtls_cipher_base_t chacha20_base_info = {
1883 MBEDTLS_CIPHER_ID_CHACHA20,
1884 NULL,
1885#if defined(MBEDTLS_CIPHER_MODE_CBC)
1886 NULL,
1887#endif
1888#if defined(MBEDTLS_CIPHER_MODE_CFB)
1889 NULL,
1890#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001891#if defined(MBEDTLS_CIPHER_MODE_OFB)
1892 NULL,
1893#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001894#if defined(MBEDTLS_CIPHER_MODE_CTR)
1895 NULL,
1896#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001897#if defined(MBEDTLS_CIPHER_MODE_XTS)
1898 NULL,
1899#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001900#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001901 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001902#endif
1903 chacha20_setkey_wrap,
1904 chacha20_setkey_wrap,
1905 chacha20_ctx_alloc,
1906 chacha20_ctx_free
1907};
1908static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001909 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001910 1,
1911 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001912 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001913 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001914 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001915 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001916 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001917};
1918#endif /* MBEDTLS_CHACHA20_C */
1919
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001920#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001921
Gilles Peskine449bd832023-01-11 14:50:10 +01001922static int chachapoly_setkey_wrap(void *ctx,
1923 const unsigned char *key,
1924 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001925{
Gilles Peskine449bd832023-01-11 14:50:10 +01001926 if (key_bitlen != 256U) {
1927 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1928 }
Daniel King8fe47012016-05-17 20:33:28 -03001929
Gilles Peskine449bd832023-01-11 14:50:10 +01001930 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1931 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1932 }
Daniel King8fe47012016-05-17 20:33:28 -03001933
Gilles Peskine449bd832023-01-11 14:50:10 +01001934 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001935}
1936
Gilles Peskine449bd832023-01-11 14:50:10 +01001937static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001938{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001939 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001940 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001941
Gilles Peskine449bd832023-01-11 14:50:10 +01001942 if (ctx == NULL) {
1943 return NULL;
1944 }
Daniel King8fe47012016-05-17 20:33:28 -03001945
Gilles Peskine449bd832023-01-11 14:50:10 +01001946 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001947
Gilles Peskine449bd832023-01-11 14:50:10 +01001948 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001949}
1950
Gilles Peskine449bd832023-01-11 14:50:10 +01001951static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001952{
Gilles Peskine449bd832023-01-11 14:50:10 +01001953 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1954 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001955}
1956
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001957static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001958 MBEDTLS_CIPHER_ID_CHACHA20,
1959 NULL,
1960#if defined(MBEDTLS_CIPHER_MODE_CBC)
1961 NULL,
1962#endif
1963#if defined(MBEDTLS_CIPHER_MODE_CFB)
1964 NULL,
1965#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001966#if defined(MBEDTLS_CIPHER_MODE_OFB)
1967 NULL,
1968#endif
Daniel King8fe47012016-05-17 20:33:28 -03001969#if defined(MBEDTLS_CIPHER_MODE_CTR)
1970 NULL,
1971#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001972#if defined(MBEDTLS_CIPHER_MODE_XTS)
1973 NULL,
1974#endif
Daniel King8fe47012016-05-17 20:33:28 -03001975#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1976 NULL,
1977#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001978 chachapoly_setkey_wrap,
1979 chachapoly_setkey_wrap,
1980 chachapoly_ctx_alloc,
1981 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001982};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001983static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001984 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001985 1,
1986 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001987 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001988 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001989 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03001990 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001991 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03001992};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001993#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03001994
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001995#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01001996static int null_crypt_stream(void *ctx, size_t length,
1997 const unsigned char *input,
1998 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001999{
2000 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01002001 memmove(output, input, length);
2002 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002003}
2004
Gilles Peskine449bd832023-01-11 14:50:10 +01002005static int null_setkey(void *ctx, const unsigned char *key,
2006 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002007{
2008 ((void) ctx);
2009 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02002010 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002011
Gilles Peskine449bd832023-01-11 14:50:10 +01002012 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002013}
2014
Gilles Peskine449bd832023-01-11 14:50:10 +01002015static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002016{
Gilles Peskine449bd832023-01-11 14:50:10 +01002017 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00002018}
2019
Gilles Peskine449bd832023-01-11 14:50:10 +01002020static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002021{
2022 ((void) ctx);
2023}
2024
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002025static const mbedtls_cipher_base_t null_base_info = {
2026 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002027 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002028#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002029 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002030#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002031#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002032 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002033#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01002034#if defined(MBEDTLS_CIPHER_MODE_OFB)
2035 NULL,
2036#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002037#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02002038 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002039#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002040#if defined(MBEDTLS_CIPHER_MODE_XTS)
2041 NULL,
2042#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002043#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002044 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002045#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002046 null_setkey,
2047 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002048 null_ctx_alloc,
2049 null_ctx_free
2050};
2051
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002052static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002053 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002054 1,
2055 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002056 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002057 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002058 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002059 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002060 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002061};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002062#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002063
Jack Lloydffdf2882019-03-07 17:00:32 -05002064#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002065static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002066{
Gilles Peskine449bd832023-01-11 14:50:10 +01002067 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002068
Gilles Peskine449bd832023-01-11 14:50:10 +01002069 if (ctx != NULL) {
2070 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2071 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002072
Gilles Peskine449bd832023-01-11 14:50:10 +01002073 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002074}
2075
Gilles Peskine449bd832023-01-11 14:50:10 +01002076static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002077{
Gilles Peskine449bd832023-01-11 14:50:10 +01002078 mbedtls_nist_kw_free(ctx);
2079 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002080}
2081
Gilles Peskine449bd832023-01-11 14:50:10 +01002082static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2083 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002084{
Gilles Peskine449bd832023-01-11 14:50:10 +01002085 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2086 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002087}
2088
Gilles Peskine449bd832023-01-11 14:50:10 +01002089static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2090 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002091{
Gilles Peskine449bd832023-01-11 14:50:10 +01002092 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2093 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002094}
2095
2096static const mbedtls_cipher_base_t kw_aes_info = {
2097 MBEDTLS_CIPHER_ID_AES,
2098 NULL,
2099#if defined(MBEDTLS_CIPHER_MODE_CBC)
2100 NULL,
2101#endif
2102#if defined(MBEDTLS_CIPHER_MODE_CFB)
2103 NULL,
2104#endif
2105#if defined(MBEDTLS_CIPHER_MODE_OFB)
2106 NULL,
2107#endif
2108#if defined(MBEDTLS_CIPHER_MODE_CTR)
2109 NULL,
2110#endif
2111#if defined(MBEDTLS_CIPHER_MODE_XTS)
2112 NULL,
2113#endif
2114#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2115 NULL,
2116#endif
2117 kw_aes_setkey_wrap,
2118 kw_aes_setkey_unwrap,
2119 kw_ctx_alloc,
2120 kw_ctx_free,
2121};
2122
2123static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002124 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002125 16,
2126 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002127 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002128 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002129 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002130 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002131 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002132};
2133
Yanray Wang7732ced2023-09-14 13:51:14 +08002134#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002135static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002136 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002137 16,
2138 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002139 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002140 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002141 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002142 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002143 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002144};
2145
2146static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002147 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002148 16,
2149 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002150 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002151 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002152 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002153 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002154 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002155};
Yanray Wang7732ced2023-09-14 13:51:14 +08002156#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002157
2158static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002159 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002160 16,
2161 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002162 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002163 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002164 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002165 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002166 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002167};
2168
Yanray Wang7732ced2023-09-14 13:51:14 +08002169#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002170static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002171 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002172 16,
2173 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002174 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002175 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002176 MBEDTLS_CIPHER_AES_192_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002177 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002178 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002179};
2180
2181static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002182 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002183 16,
2184 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002185 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002186 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002187 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002188 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002189 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002190};
Yanray Wang7732ced2023-09-14 13:51:14 +08002191#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002192#endif /* MBEDTLS_NIST_KW_C */
2193
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002194const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002195{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002196#if defined(MBEDTLS_AES_C)
2197 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002198#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002199 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2200 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002201#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002202#if defined(MBEDTLS_CIPHER_MODE_CBC)
2203 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002204#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002205 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2206 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002207#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002208#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002209#if defined(MBEDTLS_CIPHER_MODE_CFB)
2210 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002211#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002212 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2213 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002214#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002215#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002216#if defined(MBEDTLS_CIPHER_MODE_OFB)
2217 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002218#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002219 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2220 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2221#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002222#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002223#if defined(MBEDTLS_CIPHER_MODE_CTR)
2224 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002225#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002226 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2227 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002228#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002229#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002230#if defined(MBEDTLS_CIPHER_MODE_XTS)
2231 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002232#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jaeden Ameroc6539902018-04-30 17:17:41 +01002233 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2234#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002235#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002236#if defined(MBEDTLS_GCM_C)
2237 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002238#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002239 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2240 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002241#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002242#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002243#if defined(MBEDTLS_CCM_C)
2244 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002245#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002246 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2247 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002248#endif
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002249 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002250#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002251 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2252 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002253#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002254#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002255#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002256
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002257#if defined(MBEDTLS_CAMELLIA_C)
2258 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2259 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2260 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2261#if defined(MBEDTLS_CIPHER_MODE_CBC)
2262 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2263 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2264 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002265#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002266#if defined(MBEDTLS_CIPHER_MODE_CFB)
2267 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2268 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2269 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002270#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002271#if defined(MBEDTLS_CIPHER_MODE_CTR)
2272 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2273 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2274 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002275#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002276#if defined(MBEDTLS_GCM_C)
2277 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2278 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2279 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002280#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002281#if defined(MBEDTLS_CCM_C)
2282 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2283 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2284 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002285 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2286 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2287 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002288#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002289#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002290
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002291#if defined(MBEDTLS_ARIA_C)
2292 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2293 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2294 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2295#if defined(MBEDTLS_CIPHER_MODE_CBC)
2296 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2297 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2298 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2299#endif
2300#if defined(MBEDTLS_CIPHER_MODE_CFB)
2301 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2302 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2303 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2304#endif
2305#if defined(MBEDTLS_CIPHER_MODE_CTR)
2306 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2307 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2308 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2309#endif
2310#if defined(MBEDTLS_GCM_C)
2311 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2312 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2313 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2314#endif
2315#if defined(MBEDTLS_CCM_C)
2316 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2317 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2318 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002319 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2320 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2321 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002322#endif
2323#endif /* MBEDTLS_ARIA_C */
2324
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002325#if defined(MBEDTLS_DES_C)
2326 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2327 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2328 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2329#if defined(MBEDTLS_CIPHER_MODE_CBC)
2330 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2331 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2332 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002333#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002334#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002335
Daniel Kingbd920622016-05-15 19:56:20 -03002336#if defined(MBEDTLS_CHACHA20_C)
2337 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2338#endif
2339
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002340#if defined(MBEDTLS_CHACHAPOLY_C)
2341 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002342#endif
2343
Jack Lloydffdf2882019-03-07 17:00:32 -05002344#if defined(MBEDTLS_NIST_KW_C)
2345 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002346#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002347 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2348 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002349#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002350 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
Yanray Wang7732ced2023-09-14 13:51:14 +08002351#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
Jack Lloydffdf2882019-03-07 17:00:32 -05002352 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2353 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2354#endif
Yanray Wang7732ced2023-09-14 13:51:14 +08002355#endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002356
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002357#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2358 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2359#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002360
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002361 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002362};
2363
Gilles Peskine449bd832023-01-11 14:50:10 +01002364#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2365 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002366int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002367
Dave Rodgman3b46b772023-06-24 13:25:06 +01002368const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002369#if defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002370 [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002371#endif
2372#if defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002373 [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002374#endif
2375#if defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002376 [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002377#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002378#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002379 [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002380#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002381#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002382 [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002383#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002384#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002385 [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002386#endif
2387#if defined(MBEDTLS_CHACHA20_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002388 [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002389#endif
2390#if defined(MBEDTLS_CHACHAPOLY_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002391 [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002392#endif
2393#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002394 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002395#endif
2396#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002397 [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002398#endif
2399#if defined(MBEDTLS_DES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002400 [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002401#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002402#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002403 [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002404#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002405#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002406 [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002407#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002408#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002409 [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002410#endif
2411#if defined(MBEDTLS_NIST_KW_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002412 [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002413#endif
2414#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002415 [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
Dave Rodgmande3de772023-06-24 12:51:06 +01002416#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002417#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgman25d77cb2023-06-24 22:58:51 +01002418 [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
Dave Rodgmande3de772023-06-24 12:51:06 +01002419#endif
2420};
2421
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002422#endif /* MBEDTLS_CIPHER_C */