blob: 7987518655a53563ba86ead1755b1d349e4e4d46 [file] [log] [blame]
Paul Bakker8123e9d2011-01-06 15:37:30 +00001/**
Paul Bakkerfae35f02013-03-13 10:33:51 +01002 * \file cipher_wrap.c
Paul Bakker9af723c2014-05-01 13:03:14 +02003 *
Manuel Pégourié-Gonnardb4fe3cb2015-01-22 16:11:05 +00004 * \brief Generic cipher wrapper for mbed TLS
Paul Bakker8123e9d2011-01-06 15:37:30 +00005 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
7 *
Bence Szépkúti1e148272020-08-07 13:07:28 +02008 * Copyright The Mbed TLS Contributors
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +02009 * SPDX-License-Identifier: Apache-2.0
10 *
11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
12 * not use this file except in compliance with the License.
13 * You may obtain a copy of the License at
14 *
15 * http://www.apache.org/licenses/LICENSE-2.0
16 *
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
Paul Bakker8123e9d2011-01-06 15:37:30 +000022 */
23
Gilles Peskinedb09ef62020-06-03 01:43:33 +020024#include "common.h"
Paul Bakker8123e9d2011-01-06 15:37:30 +000025
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020026#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000027
Chris Jonesdaacb592021-03-09 17:03:29 +000028#include "cipher_wrap.h"
Janos Follath24eed8d2019-11-22 13:21:35 +000029#include "mbedtls/error.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000030
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +020031#if defined(MBEDTLS_CHACHAPOLY_C)
32#include "mbedtls/chachapoly.h"
Daniel King8fe47012016-05-17 20:33:28 -030033#endif
34
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000036#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000037#endif
38
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020039#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000040#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000041#endif
42
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000043#if defined(MBEDTLS_ARIA_C)
44#include "mbedtls/aria.h"
45#endif
46
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000048#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000049#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000050
Daniel Kingbd920622016-05-15 19:56:20 -030051#if defined(MBEDTLS_CHACHA20_C)
52#include "mbedtls/chacha20.h"
53#endif
54
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000056#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020057#endif
58
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000060#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020061#endif
62
Jack Lloydffdf2882019-03-07 17:00:32 -050063#if defined(MBEDTLS_NIST_KW_C)
64#include "mbedtls/nist_kw.h"
65#endif
66
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000068#include <string.h>
69#endif
70
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000071#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020072
Dave Rodgmande3de772023-06-24 12:51:06 +010073#define MBEDTLS_CIPHER_BASE_INDEX_AES 0
74#define MBEDTLS_CIPHER_BASE_INDEX_ARIA 1
75#define MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA 2
76#define MBEDTLS_CIPHER_BASE_INDEX_CCM_AES 3
77#define MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA 4
78#define MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA 5
79#define MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE 6
80#define MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE 7
81#define MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3 8
82#define MBEDTLS_CIPHER_BASE_INDEX_DES_EDE 9
83#define MBEDTLS_CIPHER_BASE_INDEX_DES 10
84#define MBEDTLS_CIPHER_BASE_INDEX_GCM_AES 11
85#define MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA 12
86#define MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA 13
87#define MBEDTLS_CIPHER_BASE_INDEX_KW_AES 14
88#define MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE 15
89#define MBEDTLS_CIPHER_BASE_INDEX_XTS_AES 16
90
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020091#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020092/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +010093static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020094{
Gilles Peskine449bd832023-01-11 14:50:10 +010095 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020096
Gilles Peskine449bd832023-01-11 14:50:10 +010097 if (ctx != NULL) {
98 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
99 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200100
Gilles Peskine449bd832023-01-11 14:50:10 +0100101 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200102}
103
Gilles Peskine449bd832023-01-11 14:50:10 +0100104static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200105{
Gilles Peskine449bd832023-01-11 14:50:10 +0100106 mbedtls_gcm_free(ctx);
107 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200108}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200109#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200110
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200111#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200112/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100113static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200114{
Gilles Peskine449bd832023-01-11 14:50:10 +0100115 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200116
Gilles Peskine449bd832023-01-11 14:50:10 +0100117 if (ctx != NULL) {
118 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
119 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200120
Gilles Peskine449bd832023-01-11 14:50:10 +0100121 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200122}
123
Gilles Peskine449bd832023-01-11 14:50:10 +0100124static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200125{
Gilles Peskine449bd832023-01-11 14:50:10 +0100126 mbedtls_ccm_free(ctx);
127 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200128}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200129#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200130
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200131#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000132
Gilles Peskine449bd832023-01-11 14:50:10 +0100133static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
134 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200135{
Gilles Peskine449bd832023-01-11 14:50:10 +0100136 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200137}
138
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200139#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100140static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
141 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000142{
Gilles Peskine449bd832023-01-11 14:50:10 +0100143 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
144 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000145}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200146#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000147
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200148#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100149static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
150 size_t length, size_t *iv_off, unsigned char *iv,
151 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000152{
Gilles Peskine449bd832023-01-11 14:50:10 +0100153 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
154 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000155}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200156#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000157
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100158#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100159static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
160 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100161{
Gilles Peskine449bd832023-01-11 14:50:10 +0100162 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
163 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100164}
165#endif /* MBEDTLS_CIPHER_MODE_OFB */
166
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200167#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100168static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
169 unsigned char *nonce_counter, unsigned char *stream_block,
170 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000171{
Gilles Peskine449bd832023-01-11 14:50:10 +0100172 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
173 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000174}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200175#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000176
Jaeden Ameroc6539902018-04-30 17:17:41 +0100177#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100178static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
179 size_t length,
180 const unsigned char data_unit[16],
181 const unsigned char *input,
182 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100183{
184 mbedtls_aes_xts_context *xts_ctx = ctx;
185 int mode;
186
Gilles Peskine449bd832023-01-11 14:50:10 +0100187 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100188 case MBEDTLS_ENCRYPT:
189 mode = MBEDTLS_AES_ENCRYPT;
190 break;
191 case MBEDTLS_DECRYPT:
192 mode = MBEDTLS_AES_DECRYPT;
193 break;
194 default:
195 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
196 }
197
Gilles Peskine449bd832023-01-11 14:50:10 +0100198 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
199 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100200}
201#endif /* MBEDTLS_CIPHER_MODE_XTS */
202
Gilles Peskine449bd832023-01-11 14:50:10 +0100203static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
204 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000205{
Gilles Peskine449bd832023-01-11 14:50:10 +0100206 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000207}
208
Gilles Peskine449bd832023-01-11 14:50:10 +0100209static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
210 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000211{
Gilles Peskine449bd832023-01-11 14:50:10 +0100212 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000213}
214
Gilles Peskine449bd832023-01-11 14:50:10 +0100215static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000216{
Gilles Peskine449bd832023-01-11 14:50:10 +0100217 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200218
Gilles Peskine449bd832023-01-11 14:50:10 +0100219 if (aes == NULL) {
220 return NULL;
221 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200222
Gilles Peskine449bd832023-01-11 14:50:10 +0100223 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200224
Gilles Peskine449bd832023-01-11 14:50:10 +0100225 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000226}
227
Gilles Peskine449bd832023-01-11 14:50:10 +0100228static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000229{
Gilles Peskine449bd832023-01-11 14:50:10 +0100230 mbedtls_aes_free((mbedtls_aes_context *) ctx);
231 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000232}
233
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200234static const mbedtls_cipher_base_t aes_info = {
235 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200236 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200237#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000238 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100239#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200240#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000241 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100242#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100243#if defined(MBEDTLS_CIPHER_MODE_OFB)
244 aes_crypt_ofb_wrap,
245#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200246#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000247 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100248#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100249#if defined(MBEDTLS_CIPHER_MODE_XTS)
250 NULL,
251#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200252#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200253 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100254#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000255 aes_setkey_enc_wrap,
256 aes_setkey_dec_wrap,
257 aes_ctx_alloc,
258 aes_ctx_free
259};
260
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200261static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100262 "AES-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100263 16,
264 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100265 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100266 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100267 MBEDTLS_CIPHER_AES_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200268 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100269 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200270};
271
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200272static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100273 "AES-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100274 16,
275 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100276 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100277 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100278 MBEDTLS_CIPHER_AES_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200279 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100280 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200281};
282
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200283static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100284 "AES-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100285 16,
286 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100287 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100288 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100289 MBEDTLS_CIPHER_AES_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200290 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100291 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker5e0efa72013-09-08 23:04:04 +0200292};
293
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200294#if defined(MBEDTLS_CIPHER_MODE_CBC)
295static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100296 "AES-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100297 16,
298 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100299 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100300 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100301 MBEDTLS_CIPHER_AES_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200302 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100303 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000304};
305
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200306static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100307 "AES-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100308 16,
309 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100310 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100311 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100312 MBEDTLS_CIPHER_AES_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200313 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100314 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000315};
316
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200317static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100318 "AES-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100319 16,
320 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100321 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100322 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100323 MBEDTLS_CIPHER_AES_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200324 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100325 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker8123e9d2011-01-06 15:37:30 +0000326};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200327#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000328
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200329#if defined(MBEDTLS_CIPHER_MODE_CFB)
330static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100331 "AES-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100332 16,
333 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100334 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100335 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100336 MBEDTLS_CIPHER_AES_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200337 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100338 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000339};
340
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200341static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100342 "AES-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100343 16,
344 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100345 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100346 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100347 MBEDTLS_CIPHER_AES_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200348 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100349 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000350};
351
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200352static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100353 "AES-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100354 16,
355 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100356 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100357 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100358 MBEDTLS_CIPHER_AES_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200359 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100360 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000361};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200362#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000363
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100364#if defined(MBEDTLS_CIPHER_MODE_OFB)
365static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100366 "AES-128-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100367 16,
368 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100369 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100370 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100371 MBEDTLS_CIPHER_AES_128_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100372 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100373 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100374};
375
376static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100377 "AES-192-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100378 16,
379 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100380 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100381 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100382 MBEDTLS_CIPHER_AES_192_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100383 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100384 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100385};
386
387static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100388 "AES-256-OFB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100389 16,
390 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100391 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100392 MBEDTLS_MODE_OFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100393 MBEDTLS_CIPHER_AES_256_OFB,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100394 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100395 MBEDTLS_CIPHER_BASE_INDEX_AES
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100396};
397#endif /* MBEDTLS_CIPHER_MODE_OFB */
398
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200399#if defined(MBEDTLS_CIPHER_MODE_CTR)
400static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100401 "AES-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100402 16,
403 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100404 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100405 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100406 MBEDTLS_CIPHER_AES_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200407 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100408 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000409};
410
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200411static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100412 "AES-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100413 16,
414 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100415 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100416 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100417 MBEDTLS_CIPHER_AES_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200418 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100419 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000420};
421
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200422static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100423 "AES-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100424 16,
425 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100426 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100427 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100428 MBEDTLS_CIPHER_AES_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200429 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100430 MBEDTLS_CIPHER_BASE_INDEX_AES
Paul Bakker343a8702011-06-09 14:27:58 +0000431};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200432#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000433
Jaeden Ameroc6539902018-04-30 17:17:41 +0100434#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100435static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
436 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100437{
438 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100439 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100440}
441
Gilles Peskine449bd832023-01-11 14:50:10 +0100442static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
443 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100444{
445 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100446 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100447}
448
Gilles Peskine449bd832023-01-11 14:50:10 +0100449static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100450{
Gilles Peskine449bd832023-01-11 14:50:10 +0100451 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100452
Gilles Peskine449bd832023-01-11 14:50:10 +0100453 if (xts_ctx != NULL) {
454 mbedtls_aes_xts_init(xts_ctx);
455 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100456
Gilles Peskine449bd832023-01-11 14:50:10 +0100457 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100458}
459
Gilles Peskine449bd832023-01-11 14:50:10 +0100460static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100461{
462 mbedtls_aes_xts_context *xts_ctx = ctx;
463
Gilles Peskine449bd832023-01-11 14:50:10 +0100464 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100465 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100466 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100467
Gilles Peskine449bd832023-01-11 14:50:10 +0100468 mbedtls_aes_xts_free(xts_ctx);
469 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100470}
471
472static const mbedtls_cipher_base_t xts_aes_info = {
473 MBEDTLS_CIPHER_ID_AES,
474 NULL,
475#if defined(MBEDTLS_CIPHER_MODE_CBC)
476 NULL,
477#endif
478#if defined(MBEDTLS_CIPHER_MODE_CFB)
479 NULL,
480#endif
481#if defined(MBEDTLS_CIPHER_MODE_OFB)
482 NULL,
483#endif
484#if defined(MBEDTLS_CIPHER_MODE_CTR)
485 NULL,
486#endif
487#if defined(MBEDTLS_CIPHER_MODE_XTS)
488 aes_crypt_xts_wrap,
489#endif
490#if defined(MBEDTLS_CIPHER_MODE_STREAM)
491 NULL,
492#endif
493 xts_aes_setkey_enc_wrap,
494 xts_aes_setkey_dec_wrap,
495 xts_aes_ctx_alloc,
496 xts_aes_ctx_free
497};
498
499static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100500 "AES-128-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100501 16,
502 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100503 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100504 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100505 MBEDTLS_CIPHER_AES_128_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100506 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100507 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100508};
509
510static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100511 "AES-256-XTS",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100512 16,
513 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100514 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100515 MBEDTLS_MODE_XTS,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100516 MBEDTLS_CIPHER_AES_256_XTS,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100517 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100518 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
Jaeden Ameroc6539902018-04-30 17:17:41 +0100519};
520#endif /* MBEDTLS_CIPHER_MODE_XTS */
521
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200522#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100523static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
524 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200525{
Gilles Peskine449bd832023-01-11 14:50:10 +0100526 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
527 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200528}
529
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200530static const mbedtls_cipher_base_t gcm_aes_info = {
531 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200532 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200533#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200534 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100535#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200536#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200537 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100538#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100539#if defined(MBEDTLS_CIPHER_MODE_OFB)
540 NULL,
541#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200542#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200543 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100544#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100545#if defined(MBEDTLS_CIPHER_MODE_XTS)
546 NULL,
547#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200548#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200549 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100550#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200551 gcm_aes_setkey_wrap,
552 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200553 gcm_ctx_alloc,
554 gcm_ctx_free,
555};
556
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200557static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100558 "AES-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100559 16,
560 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100561 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100562 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100563 MBEDTLS_CIPHER_AES_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200564 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100565 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100566};
567
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200568static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100569 "AES-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100570 16,
571 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100572 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100573 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100574 MBEDTLS_CIPHER_AES_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200575 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100576 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200577};
578
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200579static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100580 "AES-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100581 16,
582 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100583 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100584 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100585 MBEDTLS_CIPHER_AES_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200586 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100587 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
Paul Bakker68884e32013-01-07 18:20:04 +0100588};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200589#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100590
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200591#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100592static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
593 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200594{
Gilles Peskine449bd832023-01-11 14:50:10 +0100595 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
596 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200597}
598
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200599static const mbedtls_cipher_base_t ccm_aes_info = {
600 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200601 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200602#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200603 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100604#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200605#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200606 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100607#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100608#if defined(MBEDTLS_CIPHER_MODE_OFB)
609 NULL,
610#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200611#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200612 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100613#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100614#if defined(MBEDTLS_CIPHER_MODE_XTS)
615 NULL,
616#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200617#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200618 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100619#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200620 ccm_aes_setkey_wrap,
621 ccm_aes_setkey_wrap,
622 ccm_ctx_alloc,
623 ccm_ctx_free,
624};
625
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200626static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100627 "AES-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100628 16,
629 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100630 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100631 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100632 MBEDTLS_CIPHER_AES_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200633 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100634 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200635};
636
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200637static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100638 "AES-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100639 16,
640 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100641 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100642 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100643 MBEDTLS_CIPHER_AES_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200644 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100645 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200646};
647
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200648static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100649 "AES-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100650 16,
651 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100652 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100653 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100654 MBEDTLS_CIPHER_AES_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200655 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100656 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200657};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200658
659static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100660 "AES-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100661 16,
662 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100663 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100664 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100665 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200666 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100667 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200668};
669
670static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100671 "AES-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100672 16,
673 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100674 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100675 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100676 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200677 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100678 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200679};
680
681static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100682 "AES-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100683 16,
684 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100685 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100686 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100687 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200688 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100689 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200690};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200691#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200692
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200693#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000694
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200695#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000696
Gilles Peskine449bd832023-01-11 14:50:10 +0100697static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
698 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200699{
Gilles Peskine449bd832023-01-11 14:50:10 +0100700 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
701 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200702}
703
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200704#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100705static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
706 size_t length, unsigned char *iv,
707 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000708{
Gilles Peskine449bd832023-01-11 14:50:10 +0100709 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
710 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000711}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200712#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000713
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200714#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100715static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
716 size_t length, size_t *iv_off, unsigned char *iv,
717 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000718{
Gilles Peskine449bd832023-01-11 14:50:10 +0100719 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
720 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000721}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200722#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000723
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200724#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100725static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
726 unsigned char *nonce_counter, unsigned char *stream_block,
727 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000728{
Gilles Peskine449bd832023-01-11 14:50:10 +0100729 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
730 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000731}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200732#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000733
Gilles Peskine449bd832023-01-11 14:50:10 +0100734static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
735 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000736{
Gilles Peskine449bd832023-01-11 14:50:10 +0100737 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000738}
739
Gilles Peskine449bd832023-01-11 14:50:10 +0100740static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
741 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000742{
Gilles Peskine449bd832023-01-11 14:50:10 +0100743 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000744}
745
Gilles Peskine449bd832023-01-11 14:50:10 +0100746static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000747{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200748 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100749 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200750
Gilles Peskine449bd832023-01-11 14:50:10 +0100751 if (ctx == NULL) {
752 return NULL;
753 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200754
Gilles Peskine449bd832023-01-11 14:50:10 +0100755 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200756
Gilles Peskine449bd832023-01-11 14:50:10 +0100757 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000758}
759
Gilles Peskine449bd832023-01-11 14:50:10 +0100760static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000761{
Gilles Peskine449bd832023-01-11 14:50:10 +0100762 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
763 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000764}
765
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200766static const mbedtls_cipher_base_t camellia_info = {
767 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200768 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200769#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000770 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100771#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200772#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000773 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100774#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100775#if defined(MBEDTLS_CIPHER_MODE_OFB)
776 NULL,
777#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200778#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000779 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100780#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100781#if defined(MBEDTLS_CIPHER_MODE_XTS)
782 NULL,
783#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200784#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200785 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100786#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000787 camellia_setkey_enc_wrap,
788 camellia_setkey_dec_wrap,
789 camellia_ctx_alloc,
790 camellia_ctx_free
791};
792
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200793static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100794 "CAMELLIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100795 16,
796 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100797 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100798 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100799 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200800 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100801 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200802};
803
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200804static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100805 "CAMELLIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100806 16,
807 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100808 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100809 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100810 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200811 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100812 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200813};
814
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200815static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100816 "CAMELLIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100817 16,
818 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100819 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100820 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100821 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200822 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100823 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker5e0efa72013-09-08 23:04:04 +0200824};
825
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200826#if defined(MBEDTLS_CIPHER_MODE_CBC)
827static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100828 "CAMELLIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100829 16,
830 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100831 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100832 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100833 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200834 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100835 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000836};
837
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200838static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100839 "CAMELLIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100840 16,
841 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100842 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100843 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100844 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200845 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100846 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000847};
848
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200849static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100850 "CAMELLIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100851 16,
852 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100853 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100854 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100855 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200856 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100857 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker8123e9d2011-01-06 15:37:30 +0000858};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200859#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000860
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200861#if defined(MBEDTLS_CIPHER_MODE_CFB)
862static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100863 "CAMELLIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100864 16,
865 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100866 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100867 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100868 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200869 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100870 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000871};
872
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200873static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100874 "CAMELLIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100875 16,
876 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100877 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100878 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100879 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200880 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100881 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000882};
883
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200884static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100885 "CAMELLIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100886 16,
887 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100888 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100889 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100890 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200891 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100892 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000893};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200894#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000895
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200896#if defined(MBEDTLS_CIPHER_MODE_CTR)
897static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100898 "CAMELLIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100899 16,
900 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100901 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100902 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100903 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200904 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100905 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000906};
907
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200908static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100909 "CAMELLIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100910 16,
911 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100912 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100913 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100914 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200915 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100916 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000917};
918
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200919static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100920 "CAMELLIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100921 16,
922 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100923 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100924 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100925 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200926 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100927 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
Paul Bakker343a8702011-06-09 14:27:58 +0000928};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200929#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000930
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200931#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100932static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
933 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200934{
Gilles Peskine449bd832023-01-11 14:50:10 +0100935 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
936 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200937}
938
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200939static const mbedtls_cipher_base_t gcm_camellia_info = {
940 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200941 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200942#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200943 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100944#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200945#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200946 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100947#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100948#if defined(MBEDTLS_CIPHER_MODE_OFB)
949 NULL,
950#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200951#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200952 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100953#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100954#if defined(MBEDTLS_CIPHER_MODE_XTS)
955 NULL,
956#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200957#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200958 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100959#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200960 gcm_camellia_setkey_wrap,
961 gcm_camellia_setkey_wrap,
962 gcm_ctx_alloc,
963 gcm_ctx_free,
964};
965
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200966static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100967 "CAMELLIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100968 16,
969 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100970 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100971 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100972 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200973 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100974 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200975};
976
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200977static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100978 "CAMELLIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100979 16,
980 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100981 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100982 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100983 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200984 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100985 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200986};
987
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200988static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100989 "CAMELLIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100990 16,
991 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100992 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +0100993 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100994 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200995 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +0100996 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200997};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200998#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200999
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001000#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001001static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1002 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001003{
Gilles Peskine449bd832023-01-11 14:50:10 +01001004 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1005 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001006}
1007
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001008static const mbedtls_cipher_base_t ccm_camellia_info = {
1009 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001010 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001011#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001012 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001013#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001014#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001015 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001016#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001017#if defined(MBEDTLS_CIPHER_MODE_OFB)
1018 NULL,
1019#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001020#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001021 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001022#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001023#if defined(MBEDTLS_CIPHER_MODE_XTS)
1024 NULL,
1025#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001026#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001027 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001028#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001029 ccm_camellia_setkey_wrap,
1030 ccm_camellia_setkey_wrap,
1031 ccm_ctx_alloc,
1032 ccm_ctx_free,
1033};
1034
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001035static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001036 "CAMELLIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001037 16,
1038 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001039 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001040 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001041 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001042 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001043 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001044};
1045
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001046static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001047 "CAMELLIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001048 16,
1049 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001050 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001051 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001052 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001053 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001054 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001055};
1056
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001057static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001058 "CAMELLIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001059 16,
1060 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001061 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001062 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001063 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001064 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001065 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001066};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001067
1068static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001069 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001070 16,
1071 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001072 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001073 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001074 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001075 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001076 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001077};
1078
1079static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001080 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001081 16,
1082 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001083 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001084 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001085 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001086 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001087 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001088};
1089
1090static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001091 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001092 16,
1093 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001094 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001095 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001096 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001097 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001098 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001099};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001100#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001101
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001102#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001103
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001104#if defined(MBEDTLS_ARIA_C)
1105
Gilles Peskine449bd832023-01-11 14:50:10 +01001106static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1107 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001108{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001109 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001110 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1111 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001112}
1113
1114#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001115static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1116 size_t length, unsigned char *iv,
1117 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001118{
Gilles Peskine449bd832023-01-11 14:50:10 +01001119 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1120 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001121}
1122#endif /* MBEDTLS_CIPHER_MODE_CBC */
1123
1124#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001125static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1126 size_t length, size_t *iv_off, unsigned char *iv,
1127 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001128{
Gilles Peskine449bd832023-01-11 14:50:10 +01001129 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1130 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001131}
1132#endif /* MBEDTLS_CIPHER_MODE_CFB */
1133
1134#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001135static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1136 unsigned char *nonce_counter, unsigned char *stream_block,
1137 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001138{
Gilles Peskine449bd832023-01-11 14:50:10 +01001139 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1140 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001141}
1142#endif /* MBEDTLS_CIPHER_MODE_CTR */
1143
Gilles Peskine449bd832023-01-11 14:50:10 +01001144static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1145 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001146{
Gilles Peskine449bd832023-01-11 14:50:10 +01001147 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001148}
1149
Gilles Peskine449bd832023-01-11 14:50:10 +01001150static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1151 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001152{
Gilles Peskine449bd832023-01-11 14:50:10 +01001153 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001154}
1155
Gilles Peskine449bd832023-01-11 14:50:10 +01001156static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001157{
1158 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001159 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001160
Gilles Peskine449bd832023-01-11 14:50:10 +01001161 if (ctx == NULL) {
1162 return NULL;
1163 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001164
Gilles Peskine449bd832023-01-11 14:50:10 +01001165 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001166
Gilles Peskine449bd832023-01-11 14:50:10 +01001167 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001168}
1169
Gilles Peskine449bd832023-01-11 14:50:10 +01001170static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001171{
Gilles Peskine449bd832023-01-11 14:50:10 +01001172 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1173 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001174}
1175
1176static const mbedtls_cipher_base_t aria_info = {
1177 MBEDTLS_CIPHER_ID_ARIA,
1178 aria_crypt_ecb_wrap,
1179#if defined(MBEDTLS_CIPHER_MODE_CBC)
1180 aria_crypt_cbc_wrap,
1181#endif
1182#if defined(MBEDTLS_CIPHER_MODE_CFB)
1183 aria_crypt_cfb128_wrap,
1184#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001185#if defined(MBEDTLS_CIPHER_MODE_OFB)
1186 NULL,
1187#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001188#if defined(MBEDTLS_CIPHER_MODE_CTR)
1189 aria_crypt_ctr_wrap,
1190#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001191#if defined(MBEDTLS_CIPHER_MODE_XTS)
1192 NULL,
1193#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001194#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1195 NULL,
1196#endif
1197 aria_setkey_enc_wrap,
1198 aria_setkey_dec_wrap,
1199 aria_ctx_alloc,
1200 aria_ctx_free
1201};
1202
1203static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001204 "ARIA-128-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001205 16,
1206 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001207 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001208 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001209 MBEDTLS_CIPHER_ARIA_128_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001210 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001211 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001212};
1213
1214static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001215 "ARIA-192-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001216 16,
1217 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001218 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001219 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001220 MBEDTLS_CIPHER_ARIA_192_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001221 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001222 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001223};
1224
1225static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001226 "ARIA-256-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001227 16,
1228 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001229 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001230 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001231 MBEDTLS_CIPHER_ARIA_256_ECB,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001232 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001233 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001234};
1235
1236#if defined(MBEDTLS_CIPHER_MODE_CBC)
1237static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001238 "ARIA-128-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001239 16,
1240 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001241 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001242 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001243 MBEDTLS_CIPHER_ARIA_128_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001244 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001245 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001246};
1247
1248static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001249 "ARIA-192-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001250 16,
1251 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001252 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001253 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001254 MBEDTLS_CIPHER_ARIA_192_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001255 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001256 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001257};
1258
1259static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001260 "ARIA-256-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001261 16,
1262 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001263 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001264 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001265 MBEDTLS_CIPHER_ARIA_256_CBC,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001266 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001267 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001268};
1269#endif /* MBEDTLS_CIPHER_MODE_CBC */
1270
1271#if defined(MBEDTLS_CIPHER_MODE_CFB)
1272static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001273 "ARIA-128-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001274 16,
1275 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001276 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001277 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001278 MBEDTLS_CIPHER_ARIA_128_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001279 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001280 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001281};
1282
1283static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001284 "ARIA-192-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001285 16,
1286 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001287 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001288 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001289 MBEDTLS_CIPHER_ARIA_192_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001290 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001291 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001292};
1293
1294static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001295 "ARIA-256-CFB128",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001296 16,
1297 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001298 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001299 MBEDTLS_MODE_CFB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001300 MBEDTLS_CIPHER_ARIA_256_CFB128,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001301 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001302 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001303};
1304#endif /* MBEDTLS_CIPHER_MODE_CFB */
1305
1306#if defined(MBEDTLS_CIPHER_MODE_CTR)
1307static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001308 "ARIA-128-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001309 16,
1310 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001311 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001312 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001313 MBEDTLS_CIPHER_ARIA_128_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001314 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001315 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001316};
1317
1318static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001319 "ARIA-192-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001320 16,
1321 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001322 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001323 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001324 MBEDTLS_CIPHER_ARIA_192_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001325 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001326 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001327};
1328
1329static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001330 "ARIA-256-CTR",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001331 16,
1332 16 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001333 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001334 MBEDTLS_MODE_CTR,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001335 MBEDTLS_CIPHER_ARIA_256_CTR,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001336 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001337 MBEDTLS_CIPHER_BASE_INDEX_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001338};
1339#endif /* MBEDTLS_CIPHER_MODE_CTR */
1340
1341#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001342static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1343 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001344{
Gilles Peskine449bd832023-01-11 14:50:10 +01001345 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1346 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001347}
1348
1349static const mbedtls_cipher_base_t gcm_aria_info = {
1350 MBEDTLS_CIPHER_ID_ARIA,
1351 NULL,
1352#if defined(MBEDTLS_CIPHER_MODE_CBC)
1353 NULL,
1354#endif
1355#if defined(MBEDTLS_CIPHER_MODE_CFB)
1356 NULL,
1357#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001358#if defined(MBEDTLS_CIPHER_MODE_OFB)
1359 NULL,
1360#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001361#if defined(MBEDTLS_CIPHER_MODE_CTR)
1362 NULL,
1363#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001364#if defined(MBEDTLS_CIPHER_MODE_XTS)
1365 NULL,
1366#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001367#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1368 NULL,
1369#endif
1370 gcm_aria_setkey_wrap,
1371 gcm_aria_setkey_wrap,
1372 gcm_ctx_alloc,
1373 gcm_ctx_free,
1374};
1375
1376static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001377 "ARIA-128-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001378 16,
1379 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001380 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001381 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001382 MBEDTLS_CIPHER_ARIA_128_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001383 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001384 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001385};
1386
1387static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001388 "ARIA-192-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001389 16,
1390 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001391 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001392 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001393 MBEDTLS_CIPHER_ARIA_192_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001394 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001395 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001396};
1397
1398static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001399 "ARIA-256-GCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001400 16,
1401 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001402 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001403 MBEDTLS_MODE_GCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001404 MBEDTLS_CIPHER_ARIA_256_GCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001405 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001406 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001407};
1408#endif /* MBEDTLS_GCM_C */
1409
1410#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001411static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1412 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001413{
Gilles Peskine449bd832023-01-11 14:50:10 +01001414 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1415 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001416}
1417
1418static const mbedtls_cipher_base_t ccm_aria_info = {
1419 MBEDTLS_CIPHER_ID_ARIA,
1420 NULL,
1421#if defined(MBEDTLS_CIPHER_MODE_CBC)
1422 NULL,
1423#endif
1424#if defined(MBEDTLS_CIPHER_MODE_CFB)
1425 NULL,
1426#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001427#if defined(MBEDTLS_CIPHER_MODE_OFB)
1428 NULL,
1429#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001430#if defined(MBEDTLS_CIPHER_MODE_CTR)
1431 NULL,
1432#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001433#if defined(MBEDTLS_CIPHER_MODE_XTS)
1434 NULL,
1435#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001436#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1437 NULL,
1438#endif
1439 ccm_aria_setkey_wrap,
1440 ccm_aria_setkey_wrap,
1441 ccm_ctx_alloc,
1442 ccm_ctx_free,
1443};
1444
1445static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001446 "ARIA-128-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001447 16,
1448 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001449 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001450 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001451 MBEDTLS_CIPHER_ARIA_128_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001452 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001453 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001454};
1455
1456static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001457 "ARIA-192-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001458 16,
1459 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001460 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001461 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001462 MBEDTLS_CIPHER_ARIA_192_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001463 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001464 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001465};
1466
1467static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001468 "ARIA-256-CCM",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001469 16,
1470 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001471 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001472 MBEDTLS_MODE_CCM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001473 MBEDTLS_CIPHER_ARIA_256_CCM,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001474 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001475 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001476};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001477
1478static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001479 "ARIA-128-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001480 16,
1481 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001482 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001483 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001484 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001485 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001486 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001487};
1488
1489static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001490 "ARIA-192-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001491 16,
1492 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001493 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001494 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001495 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001496 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001497 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001498};
1499
1500static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001501 "ARIA-256-CCM*-NO-TAG",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001502 16,
1503 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001504 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001505 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001506 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001507 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001508 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001509};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001510#endif /* MBEDTLS_CCM_C */
1511
1512#endif /* MBEDTLS_ARIA_C */
1513
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001514#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001515
Gilles Peskine449bd832023-01-11 14:50:10 +01001516static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1517 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001518{
1519 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001520 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001521}
1522
Gilles Peskine449bd832023-01-11 14:50:10 +01001523static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1524 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001525{
1526 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001527 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001528}
1529
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001530#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001531static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1532 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001533{
Gilles Peskine449bd832023-01-11 14:50:10 +01001534 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1535 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001536}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001537#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001538
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001539#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001540static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1541 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001542{
Gilles Peskine449bd832023-01-11 14:50:10 +01001543 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1544 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001545}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001546#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001547
Gilles Peskine449bd832023-01-11 14:50:10 +01001548static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1549 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001550{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001551 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001552
Gilles Peskine449bd832023-01-11 14:50:10 +01001553 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001554}
1555
Gilles Peskine449bd832023-01-11 14:50:10 +01001556static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1557 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001558{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001559 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001560
Gilles Peskine449bd832023-01-11 14:50:10 +01001561 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001562}
1563
Gilles Peskine449bd832023-01-11 14:50:10 +01001564static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1565 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001566{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001567 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001568
Gilles Peskine449bd832023-01-11 14:50:10 +01001569 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001570}
1571
Gilles Peskine449bd832023-01-11 14:50:10 +01001572static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1573 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001574{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001575 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001576
Gilles Peskine449bd832023-01-11 14:50:10 +01001577 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001578}
1579
Gilles Peskine449bd832023-01-11 14:50:10 +01001580static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1581 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001582{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001583 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001584
Gilles Peskine449bd832023-01-11 14:50:10 +01001585 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001586}
1587
Gilles Peskine449bd832023-01-11 14:50:10 +01001588static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1589 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001590{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001591 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001592
Gilles Peskine449bd832023-01-11 14:50:10 +01001593 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001594}
1595
Gilles Peskine449bd832023-01-11 14:50:10 +01001596static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001597{
Gilles Peskine449bd832023-01-11 14:50:10 +01001598 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001599
Gilles Peskine449bd832023-01-11 14:50:10 +01001600 if (des == NULL) {
1601 return NULL;
1602 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001603
Gilles Peskine449bd832023-01-11 14:50:10 +01001604 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001605
Gilles Peskine449bd832023-01-11 14:50:10 +01001606 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001607}
1608
Gilles Peskine449bd832023-01-11 14:50:10 +01001609static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001610{
Gilles Peskine449bd832023-01-11 14:50:10 +01001611 mbedtls_des_free((mbedtls_des_context *) ctx);
1612 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001613}
1614
Gilles Peskine449bd832023-01-11 14:50:10 +01001615static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001616{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001617 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001618 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001619
Gilles Peskine449bd832023-01-11 14:50:10 +01001620 if (des3 == NULL) {
1621 return NULL;
1622 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001623
Gilles Peskine449bd832023-01-11 14:50:10 +01001624 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001625
Gilles Peskine449bd832023-01-11 14:50:10 +01001626 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001627}
1628
Gilles Peskine449bd832023-01-11 14:50:10 +01001629static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001630{
Gilles Peskine449bd832023-01-11 14:50:10 +01001631 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1632 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001633}
1634
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001635static const mbedtls_cipher_base_t des_info = {
1636 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001637 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001638#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001639 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001640#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001641#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001642 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001643#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001644#if defined(MBEDTLS_CIPHER_MODE_OFB)
1645 NULL,
1646#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001647#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001648 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001649#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001650#if defined(MBEDTLS_CIPHER_MODE_XTS)
1651 NULL,
1652#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001653#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001654 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001655#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001656 des_setkey_enc_wrap,
1657 des_setkey_dec_wrap,
1658 des_ctx_alloc,
1659 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001660};
1661
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001662static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001663 "DES-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001664 8,
1665 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001666 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001667 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001668 MBEDTLS_CIPHER_DES_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001669 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001670 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker5e0efa72013-09-08 23:04:04 +02001671};
1672
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001673#if defined(MBEDTLS_CIPHER_MODE_CBC)
1674static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001675 "DES-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001676 8,
1677 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001678 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001679 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001680 MBEDTLS_CIPHER_DES_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001681 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001682 MBEDTLS_CIPHER_BASE_INDEX_DES
Paul Bakker343a8702011-06-09 14:27:58 +00001683};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001684#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001685
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001686static const mbedtls_cipher_base_t des_ede_info = {
1687 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001688 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001689#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001690 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001691#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001692#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001693 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001694#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001695#if defined(MBEDTLS_CIPHER_MODE_OFB)
1696 NULL,
1697#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001698#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001699 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001700#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001701#if defined(MBEDTLS_CIPHER_MODE_XTS)
1702 NULL,
1703#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001704#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001705 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001706#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001707 des3_set2key_enc_wrap,
1708 des3_set2key_dec_wrap,
1709 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001710 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001711};
1712
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001713static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001714 "DES-EDE-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001715 8,
1716 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001717 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001718 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001719 MBEDTLS_CIPHER_DES_EDE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001720 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001721 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker5e0efa72013-09-08 23:04:04 +02001722};
1723
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001724#if defined(MBEDTLS_CIPHER_MODE_CBC)
1725static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001726 "DES-EDE-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001727 8,
1728 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001729 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001730 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001731 MBEDTLS_CIPHER_DES_EDE_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001732 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001733 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
Paul Bakker343a8702011-06-09 14:27:58 +00001734};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001735#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001736
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001737static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001738 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001739 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001740#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001741 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001742#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001743#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001744 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001745#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001746#if defined(MBEDTLS_CIPHER_MODE_OFB)
1747 NULL,
1748#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001749#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001750 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001751#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001752#if defined(MBEDTLS_CIPHER_MODE_XTS)
1753 NULL,
1754#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001755#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001756 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001757#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001758 des3_set3key_enc_wrap,
1759 des3_set3key_dec_wrap,
1760 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001761 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001762};
1763
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001764static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001765 "DES-EDE3-ECB",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001766 8,
1767 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001768 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001769 MBEDTLS_MODE_ECB,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001770 MBEDTLS_CIPHER_DES_EDE3_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001771 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001772 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker5e0efa72013-09-08 23:04:04 +02001773};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001774#if defined(MBEDTLS_CIPHER_MODE_CBC)
1775static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001776 "DES-EDE3-CBC",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001777 8,
1778 8 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001779 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001780 MBEDTLS_MODE_CBC,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001781 MBEDTLS_CIPHER_DES_EDE3_CBC,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001782 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001783 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
Paul Bakker8123e9d2011-01-06 15:37:30 +00001784};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001785#endif /* MBEDTLS_CIPHER_MODE_CBC */
1786#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001787
Daniel Kingbd920622016-05-15 19:56:20 -03001788#if defined(MBEDTLS_CHACHA20_C)
1789
Gilles Peskine449bd832023-01-11 14:50:10 +01001790static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1791 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001792{
Gilles Peskine449bd832023-01-11 14:50:10 +01001793 if (key_bitlen != 256U) {
1794 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1795 }
Daniel Kingbd920622016-05-15 19:56:20 -03001796
Gilles Peskine449bd832023-01-11 14:50:10 +01001797 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1798 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1799 }
Daniel Kingbd920622016-05-15 19:56:20 -03001800
Gilles Peskine449bd832023-01-11 14:50:10 +01001801 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001802}
1803
Gilles Peskine449bd832023-01-11 14:50:10 +01001804static int chacha20_stream_wrap(void *ctx, size_t length,
1805 const unsigned char *input,
1806 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001807{
Janos Follath24eed8d2019-11-22 13:21:35 +00001808 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001809
Gilles Peskine449bd832023-01-11 14:50:10 +01001810 ret = mbedtls_chacha20_update(ctx, length, input, output);
1811 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1812 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1813 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001814
Gilles Peskine449bd832023-01-11 14:50:10 +01001815 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001816}
1817
Gilles Peskine449bd832023-01-11 14:50:10 +01001818static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001819{
1820 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001821 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001822
Gilles Peskine449bd832023-01-11 14:50:10 +01001823 if (ctx == NULL) {
1824 return NULL;
1825 }
Daniel Kingbd920622016-05-15 19:56:20 -03001826
Gilles Peskine449bd832023-01-11 14:50:10 +01001827 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001828
Gilles Peskine449bd832023-01-11 14:50:10 +01001829 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001830}
1831
Gilles Peskine449bd832023-01-11 14:50:10 +01001832static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001833{
Gilles Peskine449bd832023-01-11 14:50:10 +01001834 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1835 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001836}
1837
1838static const mbedtls_cipher_base_t chacha20_base_info = {
1839 MBEDTLS_CIPHER_ID_CHACHA20,
1840 NULL,
1841#if defined(MBEDTLS_CIPHER_MODE_CBC)
1842 NULL,
1843#endif
1844#if defined(MBEDTLS_CIPHER_MODE_CFB)
1845 NULL,
1846#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001847#if defined(MBEDTLS_CIPHER_MODE_OFB)
1848 NULL,
1849#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001850#if defined(MBEDTLS_CIPHER_MODE_CTR)
1851 NULL,
1852#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001853#if defined(MBEDTLS_CIPHER_MODE_XTS)
1854 NULL,
1855#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001856#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001857 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001858#endif
1859 chacha20_setkey_wrap,
1860 chacha20_setkey_wrap,
1861 chacha20_ctx_alloc,
1862 chacha20_ctx_free
1863};
1864static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001865 "CHACHA20",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001866 1,
1867 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001868 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001869 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001870 MBEDTLS_CIPHER_CHACHA20,
Daniel Kingbd920622016-05-15 19:56:20 -03001871 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001872 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
Daniel Kingbd920622016-05-15 19:56:20 -03001873};
1874#endif /* MBEDTLS_CHACHA20_C */
1875
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001876#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001877
Gilles Peskine449bd832023-01-11 14:50:10 +01001878static int chachapoly_setkey_wrap(void *ctx,
1879 const unsigned char *key,
1880 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001881{
Gilles Peskine449bd832023-01-11 14:50:10 +01001882 if (key_bitlen != 256U) {
1883 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1884 }
Daniel King8fe47012016-05-17 20:33:28 -03001885
Gilles Peskine449bd832023-01-11 14:50:10 +01001886 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1887 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1888 }
Daniel King8fe47012016-05-17 20:33:28 -03001889
Gilles Peskine449bd832023-01-11 14:50:10 +01001890 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001891}
1892
Gilles Peskine449bd832023-01-11 14:50:10 +01001893static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001894{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001895 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001896 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001897
Gilles Peskine449bd832023-01-11 14:50:10 +01001898 if (ctx == NULL) {
1899 return NULL;
1900 }
Daniel King8fe47012016-05-17 20:33:28 -03001901
Gilles Peskine449bd832023-01-11 14:50:10 +01001902 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001903
Gilles Peskine449bd832023-01-11 14:50:10 +01001904 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001905}
1906
Gilles Peskine449bd832023-01-11 14:50:10 +01001907static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001908{
Gilles Peskine449bd832023-01-11 14:50:10 +01001909 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1910 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001911}
1912
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001913static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001914 MBEDTLS_CIPHER_ID_CHACHA20,
1915 NULL,
1916#if defined(MBEDTLS_CIPHER_MODE_CBC)
1917 NULL,
1918#endif
1919#if defined(MBEDTLS_CIPHER_MODE_CFB)
1920 NULL,
1921#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001922#if defined(MBEDTLS_CIPHER_MODE_OFB)
1923 NULL,
1924#endif
Daniel King8fe47012016-05-17 20:33:28 -03001925#if defined(MBEDTLS_CIPHER_MODE_CTR)
1926 NULL,
1927#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001928#if defined(MBEDTLS_CIPHER_MODE_XTS)
1929 NULL,
1930#endif
Daniel King8fe47012016-05-17 20:33:28 -03001931#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1932 NULL,
1933#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001934 chachapoly_setkey_wrap,
1935 chachapoly_setkey_wrap,
1936 chachapoly_ctx_alloc,
1937 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001938};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001939static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001940 "CHACHA20-POLY1305",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001941 1,
1942 12 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001943 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01001944 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001945 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Daniel King8fe47012016-05-17 20:33:28 -03001946 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01001947 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
Daniel King8fe47012016-05-17 20:33:28 -03001948};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001949#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03001950
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001951#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01001952static int null_crypt_stream(void *ctx, size_t length,
1953 const unsigned char *input,
1954 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001955{
1956 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01001957 memmove(output, input, length);
1958 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001959}
1960
Gilles Peskine449bd832023-01-11 14:50:10 +01001961static int null_setkey(void *ctx, const unsigned char *key,
1962 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001963{
1964 ((void) ctx);
1965 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001966 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001967
Gilles Peskine449bd832023-01-11 14:50:10 +01001968 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001969}
1970
Gilles Peskine449bd832023-01-11 14:50:10 +01001971static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001972{
Gilles Peskine449bd832023-01-11 14:50:10 +01001973 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00001974}
1975
Gilles Peskine449bd832023-01-11 14:50:10 +01001976static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001977{
1978 ((void) ctx);
1979}
1980
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001981static const mbedtls_cipher_base_t null_base_info = {
1982 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001983 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001984#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001985 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001986#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001987#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001988 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001989#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001990#if defined(MBEDTLS_CIPHER_MODE_OFB)
1991 NULL,
1992#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001993#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001994 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001995#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001996#if defined(MBEDTLS_CIPHER_MODE_XTS)
1997 NULL,
1998#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001999#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002000 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002001#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002002 null_setkey,
2003 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002004 null_ctx_alloc,
2005 null_ctx_free
2006};
2007
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002008static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002009 "NULL",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002010 1,
2011 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002012 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002013 MBEDTLS_MODE_STREAM,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002014 MBEDTLS_CIPHER_NULL,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002015 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002016 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
Paul Bakkerfab5c822012-02-06 16:45:10 +00002017};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002018#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002019
Jack Lloydffdf2882019-03-07 17:00:32 -05002020#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002021static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002022{
Gilles Peskine449bd832023-01-11 14:50:10 +01002023 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002024
Gilles Peskine449bd832023-01-11 14:50:10 +01002025 if (ctx != NULL) {
2026 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2027 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002028
Gilles Peskine449bd832023-01-11 14:50:10 +01002029 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002030}
2031
Gilles Peskine449bd832023-01-11 14:50:10 +01002032static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002033{
Gilles Peskine449bd832023-01-11 14:50:10 +01002034 mbedtls_nist_kw_free(ctx);
2035 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002036}
2037
Gilles Peskine449bd832023-01-11 14:50:10 +01002038static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2039 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002040{
Gilles Peskine449bd832023-01-11 14:50:10 +01002041 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2042 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002043}
2044
Gilles Peskine449bd832023-01-11 14:50:10 +01002045static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2046 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002047{
Gilles Peskine449bd832023-01-11 14:50:10 +01002048 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2049 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002050}
2051
2052static const mbedtls_cipher_base_t kw_aes_info = {
2053 MBEDTLS_CIPHER_ID_AES,
2054 NULL,
2055#if defined(MBEDTLS_CIPHER_MODE_CBC)
2056 NULL,
2057#endif
2058#if defined(MBEDTLS_CIPHER_MODE_CFB)
2059 NULL,
2060#endif
2061#if defined(MBEDTLS_CIPHER_MODE_OFB)
2062 NULL,
2063#endif
2064#if defined(MBEDTLS_CIPHER_MODE_CTR)
2065 NULL,
2066#endif
2067#if defined(MBEDTLS_CIPHER_MODE_XTS)
2068 NULL,
2069#endif
2070#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2071 NULL,
2072#endif
2073 kw_aes_setkey_wrap,
2074 kw_aes_setkey_unwrap,
2075 kw_ctx_alloc,
2076 kw_ctx_free,
2077};
2078
2079static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002080 "AES-128-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002081 16,
2082 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002083 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002084 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002085 MBEDTLS_CIPHER_AES_128_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002086 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002087 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002088};
2089
2090static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002091 "AES-192-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002092 16,
2093 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002094 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002095 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002096 MBEDTLS_CIPHER_AES_192_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002097 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002098 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002099};
2100
2101static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002102 "AES-256-KW",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002103 16,
2104 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002105 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002106 MBEDTLS_MODE_KW,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002107 MBEDTLS_CIPHER_AES_256_KW,
Jack Lloydffdf2882019-03-07 17:00:32 -05002108 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002109 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002110};
2111
2112static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002113 "AES-128-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002114 16,
2115 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002116 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002117 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002118 MBEDTLS_CIPHER_AES_128_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002119 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002120 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002121};
2122
2123static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002124 "AES-192-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002125 16,
2126 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002127 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002128 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002129 MBEDTLS_CIPHER_AES_192_KWP,
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
2134static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002135 "AES-256-KWP",
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002136 16,
2137 0 >> MBEDTLS_IV_SIZE_SHIFT,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002138 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgmand30eed42023-06-24 18:35:42 +01002139 MBEDTLS_MODE_KWP,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002140 MBEDTLS_CIPHER_AES_256_KWP,
Jack Lloydffdf2882019-03-07 17:00:32 -05002141 0,
Dave Rodgman92cf6e52023-06-24 18:06:45 +01002142 MBEDTLS_CIPHER_BASE_INDEX_KW_AES
Jack Lloydffdf2882019-03-07 17:00:32 -05002143};
2144#endif /* MBEDTLS_NIST_KW_C */
2145
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002146const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002147{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002148#if defined(MBEDTLS_AES_C)
2149 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2150 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2151 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2152#if defined(MBEDTLS_CIPHER_MODE_CBC)
2153 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2154 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2155 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002156#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002157#if defined(MBEDTLS_CIPHER_MODE_CFB)
2158 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2159 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2160 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002161#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002162#if defined(MBEDTLS_CIPHER_MODE_OFB)
2163 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2164 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2165 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2166#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002167#if defined(MBEDTLS_CIPHER_MODE_CTR)
2168 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2169 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2170 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002171#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002172#if defined(MBEDTLS_CIPHER_MODE_XTS)
2173 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2174 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2175#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002176#if defined(MBEDTLS_GCM_C)
2177 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2178 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2179 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002180#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002181#if defined(MBEDTLS_CCM_C)
2182 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2183 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2184 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002185 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
2186 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2187 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002188#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002189#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002190
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002191#if defined(MBEDTLS_CAMELLIA_C)
2192 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2193 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2194 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2195#if defined(MBEDTLS_CIPHER_MODE_CBC)
2196 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2197 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2198 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002199#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002200#if defined(MBEDTLS_CIPHER_MODE_CFB)
2201 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2202 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2203 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002204#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002205#if defined(MBEDTLS_CIPHER_MODE_CTR)
2206 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2207 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2208 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002209#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002210#if defined(MBEDTLS_GCM_C)
2211 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2212 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2213 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002214#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002215#if defined(MBEDTLS_CCM_C)
2216 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2217 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2218 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002219 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2220 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2221 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002222#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002223#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002224
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002225#if defined(MBEDTLS_ARIA_C)
2226 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2227 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2228 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2229#if defined(MBEDTLS_CIPHER_MODE_CBC)
2230 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2231 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2232 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2233#endif
2234#if defined(MBEDTLS_CIPHER_MODE_CFB)
2235 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2236 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2237 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2238#endif
2239#if defined(MBEDTLS_CIPHER_MODE_CTR)
2240 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2241 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2242 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2243#endif
2244#if defined(MBEDTLS_GCM_C)
2245 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2246 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2247 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2248#endif
2249#if defined(MBEDTLS_CCM_C)
2250 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2251 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2252 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002253 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2254 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2255 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002256#endif
2257#endif /* MBEDTLS_ARIA_C */
2258
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002259#if defined(MBEDTLS_DES_C)
2260 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2261 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2262 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2263#if defined(MBEDTLS_CIPHER_MODE_CBC)
2264 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2265 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2266 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002267#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002268#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002269
Daniel Kingbd920622016-05-15 19:56:20 -03002270#if defined(MBEDTLS_CHACHA20_C)
2271 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2272#endif
2273
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002274#if defined(MBEDTLS_CHACHAPOLY_C)
2275 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002276#endif
2277
Jack Lloydffdf2882019-03-07 17:00:32 -05002278#if defined(MBEDTLS_NIST_KW_C)
2279 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2280 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2281 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2282 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2283 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2284 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2285#endif
2286
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002287#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2288 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2289#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002290
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002291 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002292};
2293
Gilles Peskine449bd832023-01-11 14:50:10 +01002294#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2295 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002296int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002297
Dave Rodgman3b46b772023-06-24 13:25:06 +01002298const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002299#if defined(MBEDTLS_AES_C)
2300 &aes_info,
2301#else
2302 NULL,
2303#endif
2304#if defined(MBEDTLS_ARIA_C)
2305 &aria_info,
2306#else
2307 NULL,
2308#endif
2309#if defined(MBEDTLS_CAMELLIA_C)
2310 &camellia_info,
2311#else
2312 NULL,
2313#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002314#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002315 &ccm_aes_info,
2316#else
2317 NULL,
2318#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002319#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002320 &ccm_aria_info,
2321#else
2322 NULL,
2323#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002324#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002325 &ccm_camellia_info,
2326#else
2327 NULL,
2328#endif
2329#if defined(MBEDTLS_CHACHA20_C)
2330 &chacha20_base_info,
2331#else
2332 NULL,
2333#endif
2334#if defined(MBEDTLS_CHACHAPOLY_C)
2335 &chachapoly_base_info,
2336#else
2337 NULL,
2338#endif
2339#if defined(MBEDTLS_DES_C)
2340 &des_ede3_info,
2341#else
2342 NULL,
2343#endif
2344#if defined(MBEDTLS_DES_C)
2345 &des_ede_info,
2346#else
2347 NULL,
2348#endif
2349#if defined(MBEDTLS_DES_C)
2350 &des_info,
2351#else
2352 NULL,
2353#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002354#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002355 &gcm_aes_info,
2356#else
2357 NULL,
2358#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002359#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002360 &gcm_aria_info,
2361#else
2362 NULL,
2363#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002364#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002365 &gcm_camellia_info,
2366#else
2367 NULL,
2368#endif
2369#if defined(MBEDTLS_NIST_KW_C)
2370 &kw_aes_info,
2371#else
2372 NULL,
2373#endif
2374#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2375 &null_base_info,
2376#else
2377 NULL,
2378#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002379#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002380 &xts_aes_info,
2381#else
2382 NULL,
2383#endif
2384};
2385
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002386#endif /* MBEDTLS_CIPHER_C */