blob: 404e205b483136723cd1dae62a813ff1c76414e8 [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 Rodgman85a88132023-06-24 11:41:50 +010073#define MBEDTLS_CIPHER_BLOCK_SIZE_PACK(n) (n == 1 ? 0 : (n == 8 ? 1 : 2))
74
Dave Rodgmande3de772023-06-24 12:51:06 +010075#define MBEDTLS_CIPHER_BASE_INDEX_AES 0
76#define MBEDTLS_CIPHER_BASE_INDEX_ARIA 1
77#define MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA 2
78#define MBEDTLS_CIPHER_BASE_INDEX_CCM_AES 3
79#define MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA 4
80#define MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA 5
81#define MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE 6
82#define MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE 7
83#define MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3 8
84#define MBEDTLS_CIPHER_BASE_INDEX_DES_EDE 9
85#define MBEDTLS_CIPHER_BASE_INDEX_DES 10
86#define MBEDTLS_CIPHER_BASE_INDEX_GCM_AES 11
87#define MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA 12
88#define MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA 13
89#define MBEDTLS_CIPHER_BASE_INDEX_KW_AES 14
90#define MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE 15
91#define MBEDTLS_CIPHER_BASE_INDEX_XTS_AES 16
92
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020093#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020094/* shared by all GCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +010095static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020096{
Gilles Peskine449bd832023-01-11 14:50:10 +010097 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020098
Gilles Peskine449bd832023-01-11 14:50:10 +010099 if (ctx != NULL) {
100 mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
101 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200102
Gilles Peskine449bd832023-01-11 14:50:10 +0100103 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200104}
105
Gilles Peskine449bd832023-01-11 14:50:10 +0100106static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200107{
Gilles Peskine449bd832023-01-11 14:50:10 +0100108 mbedtls_gcm_free(ctx);
109 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200110}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200111#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200112
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200113#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200114/* shared by all CCM ciphers */
Gilles Peskine449bd832023-01-11 14:50:10 +0100115static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200116{
Gilles Peskine449bd832023-01-11 14:50:10 +0100117 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200118
Gilles Peskine449bd832023-01-11 14:50:10 +0100119 if (ctx != NULL) {
120 mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
121 }
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200122
Gilles Peskine449bd832023-01-11 14:50:10 +0100123 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200124}
125
Gilles Peskine449bd832023-01-11 14:50:10 +0100126static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200127{
Gilles Peskine449bd832023-01-11 14:50:10 +0100128 mbedtls_ccm_free(ctx);
129 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200130}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200131#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200132
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200133#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000134
Gilles Peskine449bd832023-01-11 14:50:10 +0100135static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
136 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200137{
Gilles Peskine449bd832023-01-11 14:50:10 +0100138 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200139}
140
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200141#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100142static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
143 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000144{
Gilles Peskine449bd832023-01-11 14:50:10 +0100145 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
146 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000147}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200148#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000149
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200150#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100151static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
152 size_t length, size_t *iv_off, unsigned char *iv,
153 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000154{
Gilles Peskine449bd832023-01-11 14:50:10 +0100155 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
156 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000157}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200158#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000159
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100160#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100161static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
162 unsigned char *iv, const unsigned char *input, unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100163{
Gilles Peskine449bd832023-01-11 14:50:10 +0100164 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
165 iv, input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100166}
167#endif /* MBEDTLS_CIPHER_MODE_OFB */
168
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200169#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100170static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
171 unsigned char *nonce_counter, unsigned char *stream_block,
172 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000173{
Gilles Peskine449bd832023-01-11 14:50:10 +0100174 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
175 stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000176}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200177#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000178
Jaeden Ameroc6539902018-04-30 17:17:41 +0100179#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100180static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
181 size_t length,
182 const unsigned char data_unit[16],
183 const unsigned char *input,
184 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100185{
186 mbedtls_aes_xts_context *xts_ctx = ctx;
187 int mode;
188
Gilles Peskine449bd832023-01-11 14:50:10 +0100189 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100190 case MBEDTLS_ENCRYPT:
191 mode = MBEDTLS_AES_ENCRYPT;
192 break;
193 case MBEDTLS_DECRYPT:
194 mode = MBEDTLS_AES_DECRYPT;
195 break;
196 default:
197 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
198 }
199
Gilles Peskine449bd832023-01-11 14:50:10 +0100200 return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
201 data_unit, input, output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100202}
203#endif /* MBEDTLS_CIPHER_MODE_XTS */
204
Gilles Peskine449bd832023-01-11 14:50:10 +0100205static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
206 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000207{
Gilles Peskine449bd832023-01-11 14:50:10 +0100208 return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000209}
210
Gilles Peskine449bd832023-01-11 14:50:10 +0100211static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
212 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000213{
Gilles Peskine449bd832023-01-11 14:50:10 +0100214 return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000215}
216
Gilles Peskine449bd832023-01-11 14:50:10 +0100217static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000218{
Gilles Peskine449bd832023-01-11 14:50:10 +0100219 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200220
Gilles Peskine449bd832023-01-11 14:50:10 +0100221 if (aes == NULL) {
222 return NULL;
223 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200224
Gilles Peskine449bd832023-01-11 14:50:10 +0100225 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200226
Gilles Peskine449bd832023-01-11 14:50:10 +0100227 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000228}
229
Gilles Peskine449bd832023-01-11 14:50:10 +0100230static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000231{
Gilles Peskine449bd832023-01-11 14:50:10 +0100232 mbedtls_aes_free((mbedtls_aes_context *) ctx);
233 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000234}
235
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200236static const mbedtls_cipher_base_t aes_info = {
237 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200238 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200239#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000240 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100241#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200242#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000243 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100244#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100245#if defined(MBEDTLS_CIPHER_MODE_OFB)
246 aes_crypt_ofb_wrap,
247#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200248#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000249 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100250#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100251#if defined(MBEDTLS_CIPHER_MODE_XTS)
252 NULL,
253#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200254#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200255 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100256#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000257 aes_setkey_enc_wrap,
258 aes_setkey_dec_wrap,
259 aes_ctx_alloc,
260 aes_ctx_free
261};
262
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200263static const mbedtls_cipher_info_t aes_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100264 "AES-128-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100265 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200266 MBEDTLS_CIPHER_AES_128_ECB,
267 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100268 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100269 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200270 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100271 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200272};
273
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200274static const mbedtls_cipher_info_t aes_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100275 "AES-192-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100276 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200277 MBEDTLS_CIPHER_AES_192_ECB,
278 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100279 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100280 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200281 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100282 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200283};
284
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200285static const mbedtls_cipher_info_t aes_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100286 "AES-256-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100287 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200288 MBEDTLS_CIPHER_AES_256_ECB,
289 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100290 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100291 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200292 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100293 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200294};
295
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200296#if defined(MBEDTLS_CIPHER_MODE_CBC)
297static const mbedtls_cipher_info_t aes_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100298 "AES-128-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +0100299 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200300 MBEDTLS_CIPHER_AES_128_CBC,
301 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100302 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100303 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200304 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100305 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000306};
307
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200308static const mbedtls_cipher_info_t aes_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100309 "AES-192-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +0100310 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200311 MBEDTLS_CIPHER_AES_192_CBC,
312 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100313 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100314 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200315 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100316 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000317};
318
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200319static const mbedtls_cipher_info_t aes_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100320 "AES-256-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +0100321 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200322 MBEDTLS_CIPHER_AES_256_CBC,
323 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100324 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100325 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200326 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100327 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000328};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200329#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000330
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200331#if defined(MBEDTLS_CIPHER_MODE_CFB)
332static const mbedtls_cipher_info_t aes_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100333 "AES-128-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +0100334 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200335 MBEDTLS_CIPHER_AES_128_CFB128,
336 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100337 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100338 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200339 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100340 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000341};
342
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200343static const mbedtls_cipher_info_t aes_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100344 "AES-192-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +0100345 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200346 MBEDTLS_CIPHER_AES_192_CFB128,
347 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100348 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100349 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200350 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100351 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000352};
353
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200354static const mbedtls_cipher_info_t aes_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100355 "AES-256-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +0100356 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200357 MBEDTLS_CIPHER_AES_256_CFB128,
358 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100359 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100360 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200361 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100362 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000363};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200364#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000365
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100366#if defined(MBEDTLS_CIPHER_MODE_OFB)
367static const mbedtls_cipher_info_t aes_128_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100368 "AES-128-OFB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100369 MBEDTLS_CIPHER_BASE_INDEX_AES,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100370 MBEDTLS_CIPHER_AES_128_OFB,
371 MBEDTLS_MODE_OFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100372 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100373 16 >> MBEDTLS_IV_SIZE_SHIFT,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100374 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100375 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100376};
377
378static const mbedtls_cipher_info_t aes_192_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100379 "AES-192-OFB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100380 MBEDTLS_CIPHER_BASE_INDEX_AES,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100381 MBEDTLS_CIPHER_AES_192_OFB,
382 MBEDTLS_MODE_OFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100383 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100384 16 >> MBEDTLS_IV_SIZE_SHIFT,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100385 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100386 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100387};
388
389static const mbedtls_cipher_info_t aes_256_ofb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100390 "AES-256-OFB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100391 MBEDTLS_CIPHER_BASE_INDEX_AES,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100392 MBEDTLS_CIPHER_AES_256_OFB,
393 MBEDTLS_MODE_OFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100394 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100395 16 >> MBEDTLS_IV_SIZE_SHIFT,
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100396 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100397 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100398};
399#endif /* MBEDTLS_CIPHER_MODE_OFB */
400
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200401#if defined(MBEDTLS_CIPHER_MODE_CTR)
402static const mbedtls_cipher_info_t aes_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100403 "AES-128-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +0100404 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200405 MBEDTLS_CIPHER_AES_128_CTR,
406 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100407 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100408 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200409 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100410 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000411};
412
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200413static const mbedtls_cipher_info_t aes_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100414 "AES-192-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +0100415 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200416 MBEDTLS_CIPHER_AES_192_CTR,
417 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100418 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100419 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200420 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100421 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000422};
423
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200424static const mbedtls_cipher_info_t aes_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100425 "AES-256-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +0100426 MBEDTLS_CIPHER_BASE_INDEX_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200427 MBEDTLS_CIPHER_AES_256_CTR,
428 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100429 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100430 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200431 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100432 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000433};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200434#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000435
Jaeden Ameroc6539902018-04-30 17:17:41 +0100436#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine449bd832023-01-11 14:50:10 +0100437static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
438 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100439{
440 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100441 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100442}
443
Gilles Peskine449bd832023-01-11 14:50:10 +0100444static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
445 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100446{
447 mbedtls_aes_xts_context *xts_ctx = ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100448 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100449}
450
Gilles Peskine449bd832023-01-11 14:50:10 +0100451static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100452{
Gilles Peskine449bd832023-01-11 14:50:10 +0100453 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100454
Gilles Peskine449bd832023-01-11 14:50:10 +0100455 if (xts_ctx != NULL) {
456 mbedtls_aes_xts_init(xts_ctx);
457 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100458
Gilles Peskine449bd832023-01-11 14:50:10 +0100459 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100460}
461
Gilles Peskine449bd832023-01-11 14:50:10 +0100462static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100463{
464 mbedtls_aes_xts_context *xts_ctx = ctx;
465
Gilles Peskine449bd832023-01-11 14:50:10 +0100466 if (xts_ctx == NULL) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100467 return;
Gilles Peskine449bd832023-01-11 14:50:10 +0100468 }
Jaeden Ameroc6539902018-04-30 17:17:41 +0100469
Gilles Peskine449bd832023-01-11 14:50:10 +0100470 mbedtls_aes_xts_free(xts_ctx);
471 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100472}
473
474static const mbedtls_cipher_base_t xts_aes_info = {
475 MBEDTLS_CIPHER_ID_AES,
476 NULL,
477#if defined(MBEDTLS_CIPHER_MODE_CBC)
478 NULL,
479#endif
480#if defined(MBEDTLS_CIPHER_MODE_CFB)
481 NULL,
482#endif
483#if defined(MBEDTLS_CIPHER_MODE_OFB)
484 NULL,
485#endif
486#if defined(MBEDTLS_CIPHER_MODE_CTR)
487 NULL,
488#endif
489#if defined(MBEDTLS_CIPHER_MODE_XTS)
490 aes_crypt_xts_wrap,
491#endif
492#if defined(MBEDTLS_CIPHER_MODE_STREAM)
493 NULL,
494#endif
495 xts_aes_setkey_enc_wrap,
496 xts_aes_setkey_dec_wrap,
497 xts_aes_ctx_alloc,
498 xts_aes_ctx_free
499};
500
501static const mbedtls_cipher_info_t aes_128_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100502 "AES-128-XTS",
Dave Rodgmande3de772023-06-24 12:51:06 +0100503 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100504 MBEDTLS_CIPHER_AES_128_XTS,
505 MBEDTLS_MODE_XTS,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100506 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100507 16 >> MBEDTLS_IV_SIZE_SHIFT,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100508 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100509 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100510};
511
512static const mbedtls_cipher_info_t aes_256_xts_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100513 "AES-256-XTS",
Dave Rodgmande3de772023-06-24 12:51:06 +0100514 MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100515 MBEDTLS_CIPHER_AES_256_XTS,
516 MBEDTLS_MODE_XTS,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100517 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100518 16 >> MBEDTLS_IV_SIZE_SHIFT,
Jaeden Ameroc6539902018-04-30 17:17:41 +0100519 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100520 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100521};
522#endif /* MBEDTLS_CIPHER_MODE_XTS */
523
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200524#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100525static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
526 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200527{
Gilles Peskine449bd832023-01-11 14:50:10 +0100528 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
529 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200530}
531
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200532static const mbedtls_cipher_base_t gcm_aes_info = {
533 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200534 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200535#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200536 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100537#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200538#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200539 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100540#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100541#if defined(MBEDTLS_CIPHER_MODE_OFB)
542 NULL,
543#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200544#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200545 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100546#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100547#if defined(MBEDTLS_CIPHER_MODE_XTS)
548 NULL,
549#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200550#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200551 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100552#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200553 gcm_aes_setkey_wrap,
554 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200555 gcm_ctx_alloc,
556 gcm_ctx_free,
557};
558
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200559static const mbedtls_cipher_info_t aes_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100560 "AES-128-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100561 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200562 MBEDTLS_CIPHER_AES_128_GCM,
563 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100564 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100565 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200566 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100567 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker68884e32013-01-07 18:20:04 +0100568};
569
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200570static const mbedtls_cipher_info_t aes_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100571 "AES-192-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100572 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200573 MBEDTLS_CIPHER_AES_192_GCM,
574 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100575 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100576 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200577 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100578 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200579};
580
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200581static const mbedtls_cipher_info_t aes_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100582 "AES-256-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100583 MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200584 MBEDTLS_CIPHER_AES_256_GCM,
585 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100586 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100587 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200588 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100589 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker68884e32013-01-07 18:20:04 +0100590};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200591#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100592
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200593#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100594static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
595 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200596{
Gilles Peskine449bd832023-01-11 14:50:10 +0100597 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
598 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200599}
600
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200601static const mbedtls_cipher_base_t ccm_aes_info = {
602 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200603 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200604#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200605 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100606#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200607#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200608 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100609#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100610#if defined(MBEDTLS_CIPHER_MODE_OFB)
611 NULL,
612#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200613#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200614 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100615#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100616#if defined(MBEDTLS_CIPHER_MODE_XTS)
617 NULL,
618#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200619#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200620 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100621#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200622 ccm_aes_setkey_wrap,
623 ccm_aes_setkey_wrap,
624 ccm_ctx_alloc,
625 ccm_ctx_free,
626};
627
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200628static const mbedtls_cipher_info_t aes_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100629 "AES-128-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100630 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200631 MBEDTLS_CIPHER_AES_128_CCM,
632 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100633 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100634 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200635 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100636 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200637};
638
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200639static const mbedtls_cipher_info_t aes_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100640 "AES-192-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100641 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200642 MBEDTLS_CIPHER_AES_192_CCM,
643 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100644 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100645 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200646 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100647 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200648};
649
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200650static const mbedtls_cipher_info_t aes_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100651 "AES-256-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100652 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200653 MBEDTLS_CIPHER_AES_256_CCM,
654 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100655 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100656 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200657 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100658 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200659};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200660
661static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100662 "AES-128-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +0100663 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200664 MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
665 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100666 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100667 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200668 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100669 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200670};
671
672static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100673 "AES-192-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +0100674 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200675 MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
676 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100677 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100678 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200679 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100680 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200681};
682
683static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100684 "AES-256-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +0100685 MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200686 MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
687 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100688 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100689 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200690 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100691 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +0200692};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200693#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200694
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200695#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000696
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200697#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000698
Gilles Peskine449bd832023-01-11 14:50:10 +0100699static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
700 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200701{
Gilles Peskine449bd832023-01-11 14:50:10 +0100702 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
703 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200704}
705
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200706#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +0100707static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
708 size_t length, unsigned char *iv,
709 const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000710{
Gilles Peskine449bd832023-01-11 14:50:10 +0100711 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
712 input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000713}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200714#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000715
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200716#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +0100717static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
718 size_t length, size_t *iv_off, unsigned char *iv,
719 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000720{
Gilles Peskine449bd832023-01-11 14:50:10 +0100721 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
722 iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000723}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200724#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000725
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200726#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +0100727static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
728 unsigned char *nonce_counter, unsigned char *stream_block,
729 const unsigned char *input, unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000730{
Gilles Peskine449bd832023-01-11 14:50:10 +0100731 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
732 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000733}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200734#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000735
Gilles Peskine449bd832023-01-11 14:50:10 +0100736static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
737 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000738{
Gilles Peskine449bd832023-01-11 14:50:10 +0100739 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000740}
741
Gilles Peskine449bd832023-01-11 14:50:10 +0100742static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
743 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000744{
Gilles Peskine449bd832023-01-11 14:50:10 +0100745 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000746}
747
Gilles Peskine449bd832023-01-11 14:50:10 +0100748static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000749{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200750 mbedtls_camellia_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +0100751 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200752
Gilles Peskine449bd832023-01-11 14:50:10 +0100753 if (ctx == NULL) {
754 return NULL;
755 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200756
Gilles Peskine449bd832023-01-11 14:50:10 +0100757 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200758
Gilles Peskine449bd832023-01-11 14:50:10 +0100759 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000760}
761
Gilles Peskine449bd832023-01-11 14:50:10 +0100762static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000763{
Gilles Peskine449bd832023-01-11 14:50:10 +0100764 mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
765 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000766}
767
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200768static const mbedtls_cipher_base_t camellia_info = {
769 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200770 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200771#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000772 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100773#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200774#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000775 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100776#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100777#if defined(MBEDTLS_CIPHER_MODE_OFB)
778 NULL,
779#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200780#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000781 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100782#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100783#if defined(MBEDTLS_CIPHER_MODE_XTS)
784 NULL,
785#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200786#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200787 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100788#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000789 camellia_setkey_enc_wrap,
790 camellia_setkey_dec_wrap,
791 camellia_ctx_alloc,
792 camellia_ctx_free
793};
794
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200795static const mbedtls_cipher_info_t camellia_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100796 "CAMELLIA-128-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100797 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200798 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
799 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100800 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100801 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200802 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100803 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200804};
805
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200806static const mbedtls_cipher_info_t camellia_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100807 "CAMELLIA-192-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100808 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200809 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
810 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100811 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100812 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200813 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100814 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200815};
816
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200817static const mbedtls_cipher_info_t camellia_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100818 "CAMELLIA-256-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +0100819 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200820 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
821 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100822 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100823 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200824 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100825 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200826};
827
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200828#if defined(MBEDTLS_CIPHER_MODE_CBC)
829static const mbedtls_cipher_info_t camellia_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100830 "CAMELLIA-128-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +0100831 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200832 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
833 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100834 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100835 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200836 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100837 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000838};
839
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200840static const mbedtls_cipher_info_t camellia_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100841 "CAMELLIA-192-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +0100842 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200843 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
844 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100845 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100846 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200847 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100848 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000849};
850
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200851static const mbedtls_cipher_info_t camellia_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100852 "CAMELLIA-256-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +0100853 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200854 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
855 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100856 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100857 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200858 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100859 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000860};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200861#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000862
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200863#if defined(MBEDTLS_CIPHER_MODE_CFB)
864static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100865 "CAMELLIA-128-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +0100866 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200867 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
868 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100869 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100870 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200871 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100872 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000873};
874
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200875static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100876 "CAMELLIA-192-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +0100877 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200878 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
879 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100880 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100881 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200882 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100883 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000884};
885
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200886static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100887 "CAMELLIA-256-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +0100888 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200889 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
890 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100891 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100892 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200893 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100894 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000895};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200896#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000897
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200898#if defined(MBEDTLS_CIPHER_MODE_CTR)
899static const mbedtls_cipher_info_t camellia_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100900 "CAMELLIA-128-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +0100901 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200902 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
903 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100904 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100905 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200906 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100907 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000908};
909
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200910static const mbedtls_cipher_info_t camellia_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100911 "CAMELLIA-192-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +0100912 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200913 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
914 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100915 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100916 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200917 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100918 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000919};
920
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200921static const mbedtls_cipher_info_t camellia_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100922 "CAMELLIA-256-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +0100923 MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200924 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
925 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100926 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100927 16 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200928 0,
Dave Rodgman85a88132023-06-24 11:41:50 +0100929 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Paul Bakker343a8702011-06-09 14:27:58 +0000930};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200931#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000932
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200933#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +0100934static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
935 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200936{
Gilles Peskine449bd832023-01-11 14:50:10 +0100937 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
938 key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200939}
940
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200941static const mbedtls_cipher_base_t gcm_camellia_info = {
942 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200943 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200944#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200945 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100946#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200947#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200948 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100949#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100950#if defined(MBEDTLS_CIPHER_MODE_OFB)
951 NULL,
952#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200953#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200954 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100955#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +0100956#if defined(MBEDTLS_CIPHER_MODE_XTS)
957 NULL,
958#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200959#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200960 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100961#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200962 gcm_camellia_setkey_wrap,
963 gcm_camellia_setkey_wrap,
964 gcm_ctx_alloc,
965 gcm_ctx_free,
966};
967
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200968static const mbedtls_cipher_info_t camellia_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100969 "CAMELLIA-128-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100970 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200971 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
972 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100973 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100974 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200975 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100976 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200977};
978
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200979static const mbedtls_cipher_info_t camellia_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100980 "CAMELLIA-192-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100981 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200982 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
983 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100984 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100985 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200986 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100987 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200988};
989
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200990static const mbedtls_cipher_info_t camellia_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +0100991 "CAMELLIA-256-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +0100992 MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200993 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
994 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +0100995 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +0100996 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200997 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +0100998 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200999};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001000#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001001
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001002#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001003static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
1004 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001005{
Gilles Peskine449bd832023-01-11 14:50:10 +01001006 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
1007 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001008}
1009
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001010static const mbedtls_cipher_base_t ccm_camellia_info = {
1011 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001012 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001013#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001014 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001015#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001016#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001017 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001018#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001019#if defined(MBEDTLS_CIPHER_MODE_OFB)
1020 NULL,
1021#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001022#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001023 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001024#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001025#if defined(MBEDTLS_CIPHER_MODE_XTS)
1026 NULL,
1027#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001028#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001029 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001030#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001031 ccm_camellia_setkey_wrap,
1032 ccm_camellia_setkey_wrap,
1033 ccm_ctx_alloc,
1034 ccm_ctx_free,
1035};
1036
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001037static const mbedtls_cipher_info_t camellia_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001038 "CAMELLIA-128-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001039 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001040 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
1041 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001042 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001043 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001044 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001045 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001046};
1047
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001048static const mbedtls_cipher_info_t camellia_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001049 "CAMELLIA-192-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001050 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001051 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
1052 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001053 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001054 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001055 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001056 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001057};
1058
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001059static const mbedtls_cipher_info_t camellia_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001060 "CAMELLIA-256-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001061 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001062 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
1063 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001064 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001065 12 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001066 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001067 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001068};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001069
1070static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001071 "CAMELLIA-128-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +01001072 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001073 MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
1074 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001075 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001076 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001077 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001078 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001079};
1080
1081static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001082 "CAMELLIA-192-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +01001083 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001084 MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
1085 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001086 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001087 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001088 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001089 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001090};
1091
1092static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001093 "CAMELLIA-256-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +01001094 MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001095 MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
1096 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001097 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001098 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001099 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001100 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001101};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001102#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001103
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001104#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001105
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001106#if defined(MBEDTLS_ARIA_C)
1107
Gilles Peskine449bd832023-01-11 14:50:10 +01001108static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1109 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001110{
Manuel Pégourié-Gonnard08c337d2018-05-22 13:18:01 +02001111 (void) operation;
Gilles Peskine449bd832023-01-11 14:50:10 +01001112 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
1113 output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001114}
1115
1116#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001117static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
1118 size_t length, unsigned char *iv,
1119 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001120{
Gilles Peskine449bd832023-01-11 14:50:10 +01001121 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
1122 input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001123}
1124#endif /* MBEDTLS_CIPHER_MODE_CBC */
1125
1126#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine449bd832023-01-11 14:50:10 +01001127static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
1128 size_t length, size_t *iv_off, unsigned char *iv,
1129 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001130{
Gilles Peskine449bd832023-01-11 14:50:10 +01001131 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
1132 iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001133}
1134#endif /* MBEDTLS_CIPHER_MODE_CFB */
1135
1136#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine449bd832023-01-11 14:50:10 +01001137static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
1138 unsigned char *nonce_counter, unsigned char *stream_block,
1139 const unsigned char *input, unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001140{
Gilles Peskine449bd832023-01-11 14:50:10 +01001141 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
1142 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001143}
1144#endif /* MBEDTLS_CIPHER_MODE_CTR */
1145
Gilles Peskine449bd832023-01-11 14:50:10 +01001146static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
1147 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001148{
Gilles Peskine449bd832023-01-11 14:50:10 +01001149 return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001150}
1151
Gilles Peskine449bd832023-01-11 14:50:10 +01001152static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
1153 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001154{
Gilles Peskine449bd832023-01-11 14:50:10 +01001155 return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001156}
1157
Gilles Peskine449bd832023-01-11 14:50:10 +01001158static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001159{
1160 mbedtls_aria_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001161 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001162
Gilles Peskine449bd832023-01-11 14:50:10 +01001163 if (ctx == NULL) {
1164 return NULL;
1165 }
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001166
Gilles Peskine449bd832023-01-11 14:50:10 +01001167 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001168
Gilles Peskine449bd832023-01-11 14:50:10 +01001169 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001170}
1171
Gilles Peskine449bd832023-01-11 14:50:10 +01001172static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001173{
Gilles Peskine449bd832023-01-11 14:50:10 +01001174 mbedtls_aria_free((mbedtls_aria_context *) ctx);
1175 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001176}
1177
1178static const mbedtls_cipher_base_t aria_info = {
1179 MBEDTLS_CIPHER_ID_ARIA,
1180 aria_crypt_ecb_wrap,
1181#if defined(MBEDTLS_CIPHER_MODE_CBC)
1182 aria_crypt_cbc_wrap,
1183#endif
1184#if defined(MBEDTLS_CIPHER_MODE_CFB)
1185 aria_crypt_cfb128_wrap,
1186#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001187#if defined(MBEDTLS_CIPHER_MODE_OFB)
1188 NULL,
1189#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001190#if defined(MBEDTLS_CIPHER_MODE_CTR)
1191 aria_crypt_ctr_wrap,
1192#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001193#if defined(MBEDTLS_CIPHER_MODE_XTS)
1194 NULL,
1195#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001196#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1197 NULL,
1198#endif
1199 aria_setkey_enc_wrap,
1200 aria_setkey_dec_wrap,
1201 aria_ctx_alloc,
1202 aria_ctx_free
1203};
1204
1205static const mbedtls_cipher_info_t aria_128_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001206 "ARIA-128-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +01001207 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001208 MBEDTLS_CIPHER_ARIA_128_ECB,
1209 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001210 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001211 0 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001212 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001213 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001214};
1215
1216static const mbedtls_cipher_info_t aria_192_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001217 "ARIA-192-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +01001218 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001219 MBEDTLS_CIPHER_ARIA_192_ECB,
1220 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001221 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001222 0 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001223 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001224 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001225};
1226
1227static const mbedtls_cipher_info_t aria_256_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001228 "ARIA-256-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +01001229 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001230 MBEDTLS_CIPHER_ARIA_256_ECB,
1231 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001232 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001233 0 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001234 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001235 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001236};
1237
1238#if defined(MBEDTLS_CIPHER_MODE_CBC)
1239static const mbedtls_cipher_info_t aria_128_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001240 "ARIA-128-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +01001241 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001242 MBEDTLS_CIPHER_ARIA_128_CBC,
1243 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001244 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001245 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001246 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001247 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001248};
1249
1250static const mbedtls_cipher_info_t aria_192_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001251 "ARIA-192-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +01001252 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001253 MBEDTLS_CIPHER_ARIA_192_CBC,
1254 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001255 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001256 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001257 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001258 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001259};
1260
1261static const mbedtls_cipher_info_t aria_256_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001262 "ARIA-256-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +01001263 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001264 MBEDTLS_CIPHER_ARIA_256_CBC,
1265 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001266 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001267 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001268 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001269 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001270};
1271#endif /* MBEDTLS_CIPHER_MODE_CBC */
1272
1273#if defined(MBEDTLS_CIPHER_MODE_CFB)
1274static const mbedtls_cipher_info_t aria_128_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001275 "ARIA-128-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +01001276 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001277 MBEDTLS_CIPHER_ARIA_128_CFB128,
1278 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001279 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001280 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001281 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001282 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001283};
1284
1285static const mbedtls_cipher_info_t aria_192_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001286 "ARIA-192-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +01001287 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001288 MBEDTLS_CIPHER_ARIA_192_CFB128,
1289 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001290 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001291 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001292 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001293 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001294};
1295
1296static const mbedtls_cipher_info_t aria_256_cfb128_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001297 "ARIA-256-CFB128",
Dave Rodgmande3de772023-06-24 12:51:06 +01001298 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001299 MBEDTLS_CIPHER_ARIA_256_CFB128,
1300 MBEDTLS_MODE_CFB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001301 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001302 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001303 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001304 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001305};
1306#endif /* MBEDTLS_CIPHER_MODE_CFB */
1307
1308#if defined(MBEDTLS_CIPHER_MODE_CTR)
1309static const mbedtls_cipher_info_t aria_128_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001310 "ARIA-128-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +01001311 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001312 MBEDTLS_CIPHER_ARIA_128_CTR,
1313 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001314 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001315 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001316 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001317 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001318};
1319
1320static const mbedtls_cipher_info_t aria_192_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001321 "ARIA-192-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +01001322 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001323 MBEDTLS_CIPHER_ARIA_192_CTR,
1324 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001325 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001326 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001327 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001328 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001329};
1330
1331static const mbedtls_cipher_info_t aria_256_ctr_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001332 "ARIA-256-CTR",
Dave Rodgmande3de772023-06-24 12:51:06 +01001333 MBEDTLS_CIPHER_BASE_INDEX_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001334 MBEDTLS_CIPHER_ARIA_256_CTR,
1335 MBEDTLS_MODE_CTR,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001336 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001337 16 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001338 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001339 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001340};
1341#endif /* MBEDTLS_CIPHER_MODE_CTR */
1342
1343#if defined(MBEDTLS_GCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001344static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1345 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001346{
Gilles Peskine449bd832023-01-11 14:50:10 +01001347 return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1348 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001349}
1350
1351static const mbedtls_cipher_base_t gcm_aria_info = {
1352 MBEDTLS_CIPHER_ID_ARIA,
1353 NULL,
1354#if defined(MBEDTLS_CIPHER_MODE_CBC)
1355 NULL,
1356#endif
1357#if defined(MBEDTLS_CIPHER_MODE_CFB)
1358 NULL,
1359#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001360#if defined(MBEDTLS_CIPHER_MODE_OFB)
1361 NULL,
1362#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001363#if defined(MBEDTLS_CIPHER_MODE_CTR)
1364 NULL,
1365#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001366#if defined(MBEDTLS_CIPHER_MODE_XTS)
1367 NULL,
1368#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001369#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1370 NULL,
1371#endif
1372 gcm_aria_setkey_wrap,
1373 gcm_aria_setkey_wrap,
1374 gcm_ctx_alloc,
1375 gcm_ctx_free,
1376};
1377
1378static const mbedtls_cipher_info_t aria_128_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001379 "ARIA-128-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001380 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001381 MBEDTLS_CIPHER_ARIA_128_GCM,
1382 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001383 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001384 12 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001385 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001386 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001387};
1388
1389static const mbedtls_cipher_info_t aria_192_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001390 "ARIA-192-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001391 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001392 MBEDTLS_CIPHER_ARIA_192_GCM,
1393 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001394 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001395 12 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001396 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001397 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001398};
1399
1400static const mbedtls_cipher_info_t aria_256_gcm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001401 "ARIA-256-GCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001402 MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001403 MBEDTLS_CIPHER_ARIA_256_GCM,
1404 MBEDTLS_MODE_GCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001405 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001406 12 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001407 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001408 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001409};
1410#endif /* MBEDTLS_GCM_C */
1411
1412#if defined(MBEDTLS_CCM_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01001413static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
1414 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001415{
Gilles Peskine449bd832023-01-11 14:50:10 +01001416 return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
1417 key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001418}
1419
1420static const mbedtls_cipher_base_t ccm_aria_info = {
1421 MBEDTLS_CIPHER_ID_ARIA,
1422 NULL,
1423#if defined(MBEDTLS_CIPHER_MODE_CBC)
1424 NULL,
1425#endif
1426#if defined(MBEDTLS_CIPHER_MODE_CFB)
1427 NULL,
1428#endif
Simon Butcher7487c5b2018-04-29 00:24:51 +01001429#if defined(MBEDTLS_CIPHER_MODE_OFB)
1430 NULL,
1431#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001432#if defined(MBEDTLS_CIPHER_MODE_CTR)
1433 NULL,
1434#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001435#if defined(MBEDTLS_CIPHER_MODE_XTS)
1436 NULL,
1437#endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001438#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1439 NULL,
1440#endif
1441 ccm_aria_setkey_wrap,
1442 ccm_aria_setkey_wrap,
1443 ccm_ctx_alloc,
1444 ccm_ctx_free,
1445};
1446
1447static const mbedtls_cipher_info_t aria_128_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001448 "ARIA-128-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001449 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001450 MBEDTLS_CIPHER_ARIA_128_CCM,
1451 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001452 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001453 12 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001454 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001455 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001456};
1457
1458static const mbedtls_cipher_info_t aria_192_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001459 "ARIA-192-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001460 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001461 MBEDTLS_CIPHER_ARIA_192_CCM,
1462 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001463 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001464 12 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001465 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001466 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001467};
1468
1469static const mbedtls_cipher_info_t aria_256_ccm_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001470 "ARIA-256-CCM",
Dave Rodgmande3de772023-06-24 12:51:06 +01001471 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001472 MBEDTLS_CIPHER_ARIA_256_CCM,
1473 MBEDTLS_MODE_CCM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001474 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001475 12 >> MBEDTLS_IV_SIZE_SHIFT,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001476 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001477 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001478};
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001479
1480static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001481 "ARIA-128-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +01001482 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001483 MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
1484 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001485 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001486 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001487 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001488 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001489};
1490
1491static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001492 "ARIA-192-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +01001493 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001494 MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
1495 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001496 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001497 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001498 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001499 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001500};
1501
1502static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001503 "ARIA-256-CCM*-NO-TAG",
Dave Rodgmande3de772023-06-24 12:51:06 +01001504 MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001505 MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
1506 MBEDTLS_MODE_CCM_STAR_NO_TAG,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001507 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001508 12 >> MBEDTLS_IV_SIZE_SHIFT,
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001509 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Dave Rodgman85a88132023-06-24 11:41:50 +01001510 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02001511};
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001512#endif /* MBEDTLS_CCM_C */
1513
1514#endif /* MBEDTLS_ARIA_C */
1515
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001516#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001517
Gilles Peskine449bd832023-01-11 14:50:10 +01001518static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1519 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001520{
1521 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001522 return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001523}
1524
Gilles Peskine449bd832023-01-11 14:50:10 +01001525static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
1526 const unsigned char *input, unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001527{
1528 ((void) operation);
Gilles Peskine449bd832023-01-11 14:50:10 +01001529 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001530}
1531
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001532#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001533static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1534 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001535{
Gilles Peskine449bd832023-01-11 14:50:10 +01001536 return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
1537 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001538}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001539#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001540
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001541#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine449bd832023-01-11 14:50:10 +01001542static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
1543 unsigned char *iv, const unsigned char *input, unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001544{
Gilles Peskine449bd832023-01-11 14:50:10 +01001545 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
1546 output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001547}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001548#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001549
Gilles Peskine449bd832023-01-11 14:50:10 +01001550static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
1551 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001552{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001553 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001554
Gilles Peskine449bd832023-01-11 14:50:10 +01001555 return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001556}
1557
Gilles Peskine449bd832023-01-11 14:50:10 +01001558static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
1559 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001560{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001561 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001562
Gilles Peskine449bd832023-01-11 14:50:10 +01001563 return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001564}
1565
Gilles Peskine449bd832023-01-11 14:50:10 +01001566static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
1567 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001568{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001569 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001570
Gilles Peskine449bd832023-01-11 14:50:10 +01001571 return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001572}
1573
Gilles Peskine449bd832023-01-11 14:50:10 +01001574static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
1575 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001576{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001577 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001578
Gilles Peskine449bd832023-01-11 14:50:10 +01001579 return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001580}
1581
Gilles Peskine449bd832023-01-11 14:50:10 +01001582static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
1583 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001584{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001585 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001586
Gilles Peskine449bd832023-01-11 14:50:10 +01001587 return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001588}
1589
Gilles Peskine449bd832023-01-11 14:50:10 +01001590static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
1591 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001592{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001593 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001594
Gilles Peskine449bd832023-01-11 14:50:10 +01001595 return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001596}
1597
Gilles Peskine449bd832023-01-11 14:50:10 +01001598static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001599{
Gilles Peskine449bd832023-01-11 14:50:10 +01001600 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001601
Gilles Peskine449bd832023-01-11 14:50:10 +01001602 if (des == NULL) {
1603 return NULL;
1604 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001605
Gilles Peskine449bd832023-01-11 14:50:10 +01001606 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001607
Gilles Peskine449bd832023-01-11 14:50:10 +01001608 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001609}
1610
Gilles Peskine449bd832023-01-11 14:50:10 +01001611static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001612{
Gilles Peskine449bd832023-01-11 14:50:10 +01001613 mbedtls_des_free((mbedtls_des_context *) ctx);
1614 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001615}
1616
Gilles Peskine449bd832023-01-11 14:50:10 +01001617static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001618{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001619 mbedtls_des3_context *des3;
Gilles Peskine449bd832023-01-11 14:50:10 +01001620 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001621
Gilles Peskine449bd832023-01-11 14:50:10 +01001622 if (des3 == NULL) {
1623 return NULL;
1624 }
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001625
Gilles Peskine449bd832023-01-11 14:50:10 +01001626 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001627
Gilles Peskine449bd832023-01-11 14:50:10 +01001628 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001629}
1630
Gilles Peskine449bd832023-01-11 14:50:10 +01001631static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001632{
Gilles Peskine449bd832023-01-11 14:50:10 +01001633 mbedtls_des3_free((mbedtls_des3_context *) ctx);
1634 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001635}
1636
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001637static const mbedtls_cipher_base_t des_info = {
1638 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001639 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001640#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001641 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001642#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001643#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001644 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001645#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001646#if defined(MBEDTLS_CIPHER_MODE_OFB)
1647 NULL,
1648#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001649#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001650 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001651#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001652#if defined(MBEDTLS_CIPHER_MODE_XTS)
1653 NULL,
1654#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001655#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001656 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001657#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001658 des_setkey_enc_wrap,
1659 des_setkey_dec_wrap,
1660 des_ctx_alloc,
1661 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001662};
1663
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001664static const mbedtls_cipher_info_t des_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001665 "DES-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +01001666 MBEDTLS_CIPHER_BASE_INDEX_DES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001667 MBEDTLS_CIPHER_DES_ECB,
1668 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001669 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001670 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001671 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001672 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(8)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001673};
1674
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001675#if defined(MBEDTLS_CIPHER_MODE_CBC)
1676static const mbedtls_cipher_info_t des_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001677 "DES-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +01001678 MBEDTLS_CIPHER_BASE_INDEX_DES,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001679 MBEDTLS_CIPHER_DES_CBC,
1680 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001681 MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001682 8 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001683 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001684 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(8)
Paul Bakker343a8702011-06-09 14:27:58 +00001685};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001686#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001687
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001688static const mbedtls_cipher_base_t des_ede_info = {
1689 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001690 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001691#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001692 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001693#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001694#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001695 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001696#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001697#if defined(MBEDTLS_CIPHER_MODE_OFB)
1698 NULL,
1699#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001700#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001701 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001702#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001703#if defined(MBEDTLS_CIPHER_MODE_XTS)
1704 NULL,
1705#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001706#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001707 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001708#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001709 des3_set2key_enc_wrap,
1710 des3_set2key_dec_wrap,
1711 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001712 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001713};
1714
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001715static const mbedtls_cipher_info_t des_ede_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001716 "DES-EDE-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +01001717 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001718 MBEDTLS_CIPHER_DES_EDE_ECB,
1719 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001720 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001721 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001722 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001723 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(8)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001724};
1725
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001726#if defined(MBEDTLS_CIPHER_MODE_CBC)
1727static const mbedtls_cipher_info_t des_ede_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001728 "DES-EDE-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +01001729 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001730 MBEDTLS_CIPHER_DES_EDE_CBC,
1731 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001732 MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001733 8 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001734 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001735 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(8)
Paul Bakker343a8702011-06-09 14:27:58 +00001736};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001737#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001738
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001739static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001740 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001741 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001742#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001743 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001744#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001745#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001746 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001747#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001748#if defined(MBEDTLS_CIPHER_MODE_OFB)
1749 NULL,
1750#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001751#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001752 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001753#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001754#if defined(MBEDTLS_CIPHER_MODE_XTS)
1755 NULL,
1756#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001757#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001758 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001759#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001760 des3_set3key_enc_wrap,
1761 des3_set3key_dec_wrap,
1762 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001763 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001764};
1765
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001766static const mbedtls_cipher_info_t des_ede3_ecb_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001767 "DES-EDE3-ECB",
Dave Rodgmande3de772023-06-24 12:51:06 +01001768 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001769 MBEDTLS_CIPHER_DES_EDE3_ECB,
1770 MBEDTLS_MODE_ECB,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001771 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001772 0 >> MBEDTLS_IV_SIZE_SHIFT,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001773 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001774 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(8)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001775};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001776#if defined(MBEDTLS_CIPHER_MODE_CBC)
1777static const mbedtls_cipher_info_t des_ede3_cbc_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001778 "DES-EDE3-CBC",
Dave Rodgmande3de772023-06-24 12:51:06 +01001779 MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001780 MBEDTLS_CIPHER_DES_EDE3_CBC,
1781 MBEDTLS_MODE_CBC,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001782 MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001783 8 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001784 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001785 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(8)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001786};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001787#endif /* MBEDTLS_CIPHER_MODE_CBC */
1788#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001789
Daniel Kingbd920622016-05-15 19:56:20 -03001790#if defined(MBEDTLS_CHACHA20_C)
1791
Gilles Peskine449bd832023-01-11 14:50:10 +01001792static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
1793 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001794{
Gilles Peskine449bd832023-01-11 14:50:10 +01001795 if (key_bitlen != 256U) {
1796 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1797 }
Daniel Kingbd920622016-05-15 19:56:20 -03001798
Gilles Peskine449bd832023-01-11 14:50:10 +01001799 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
1800 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1801 }
Daniel Kingbd920622016-05-15 19:56:20 -03001802
Gilles Peskine449bd832023-01-11 14:50:10 +01001803 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001804}
1805
Gilles Peskine449bd832023-01-11 14:50:10 +01001806static int chacha20_stream_wrap(void *ctx, size_t length,
1807 const unsigned char *input,
1808 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001809{
Janos Follath24eed8d2019-11-22 13:21:35 +00001810 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001811
Gilles Peskine449bd832023-01-11 14:50:10 +01001812 ret = mbedtls_chacha20_update(ctx, length, input, output);
1813 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
1814 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1815 }
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001816
Gilles Peskine449bd832023-01-11 14:50:10 +01001817 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001818}
1819
Gilles Peskine449bd832023-01-11 14:50:10 +01001820static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001821{
1822 mbedtls_chacha20_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001823 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001824
Gilles Peskine449bd832023-01-11 14:50:10 +01001825 if (ctx == NULL) {
1826 return NULL;
1827 }
Daniel Kingbd920622016-05-15 19:56:20 -03001828
Gilles Peskine449bd832023-01-11 14:50:10 +01001829 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001830
Gilles Peskine449bd832023-01-11 14:50:10 +01001831 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001832}
1833
Gilles Peskine449bd832023-01-11 14:50:10 +01001834static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001835{
Gilles Peskine449bd832023-01-11 14:50:10 +01001836 mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
1837 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001838}
1839
1840static const mbedtls_cipher_base_t chacha20_base_info = {
1841 MBEDTLS_CIPHER_ID_CHACHA20,
1842 NULL,
1843#if defined(MBEDTLS_CIPHER_MODE_CBC)
1844 NULL,
1845#endif
1846#if defined(MBEDTLS_CIPHER_MODE_CFB)
1847 NULL,
1848#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001849#if defined(MBEDTLS_CIPHER_MODE_OFB)
1850 NULL,
1851#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001852#if defined(MBEDTLS_CIPHER_MODE_CTR)
1853 NULL,
1854#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001855#if defined(MBEDTLS_CIPHER_MODE_XTS)
1856 NULL,
1857#endif
Daniel Kingbd920622016-05-15 19:56:20 -03001858#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001859 chacha20_stream_wrap,
Daniel Kingbd920622016-05-15 19:56:20 -03001860#endif
1861 chacha20_setkey_wrap,
1862 chacha20_setkey_wrap,
1863 chacha20_ctx_alloc,
1864 chacha20_ctx_free
1865};
1866static const mbedtls_cipher_info_t chacha20_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001867 "CHACHA20",
Dave Rodgmande3de772023-06-24 12:51:06 +01001868 MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
Daniel Kingbd920622016-05-15 19:56:20 -03001869 MBEDTLS_CIPHER_CHACHA20,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001870 MBEDTLS_MODE_STREAM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001871 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001872 12 >> MBEDTLS_IV_SIZE_SHIFT,
Daniel Kingbd920622016-05-15 19:56:20 -03001873 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001874 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(1)
Daniel Kingbd920622016-05-15 19:56:20 -03001875};
1876#endif /* MBEDTLS_CHACHA20_C */
1877
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001878#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001879
Gilles Peskine449bd832023-01-11 14:50:10 +01001880static int chachapoly_setkey_wrap(void *ctx,
1881 const unsigned char *key,
1882 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001883{
Gilles Peskine449bd832023-01-11 14:50:10 +01001884 if (key_bitlen != 256U) {
1885 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1886 }
Daniel King8fe47012016-05-17 20:33:28 -03001887
Gilles Peskine449bd832023-01-11 14:50:10 +01001888 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
1889 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
1890 }
Daniel King8fe47012016-05-17 20:33:28 -03001891
Gilles Peskine449bd832023-01-11 14:50:10 +01001892 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001893}
1894
Gilles Peskine449bd832023-01-11 14:50:10 +01001895static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001896{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001897 mbedtls_chachapoly_context *ctx;
Gilles Peskine449bd832023-01-11 14:50:10 +01001898 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001899
Gilles Peskine449bd832023-01-11 14:50:10 +01001900 if (ctx == NULL) {
1901 return NULL;
1902 }
Daniel King8fe47012016-05-17 20:33:28 -03001903
Gilles Peskine449bd832023-01-11 14:50:10 +01001904 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001905
Gilles Peskine449bd832023-01-11 14:50:10 +01001906 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001907}
1908
Gilles Peskine449bd832023-01-11 14:50:10 +01001909static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001910{
Gilles Peskine449bd832023-01-11 14:50:10 +01001911 mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
1912 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001913}
1914
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001915static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001916 MBEDTLS_CIPHER_ID_CHACHA20,
1917 NULL,
1918#if defined(MBEDTLS_CIPHER_MODE_CBC)
1919 NULL,
1920#endif
1921#if defined(MBEDTLS_CIPHER_MODE_CFB)
1922 NULL,
1923#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001924#if defined(MBEDTLS_CIPHER_MODE_OFB)
1925 NULL,
1926#endif
Daniel King8fe47012016-05-17 20:33:28 -03001927#if defined(MBEDTLS_CIPHER_MODE_CTR)
1928 NULL,
1929#endif
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001930#if defined(MBEDTLS_CIPHER_MODE_XTS)
1931 NULL,
1932#endif
Daniel King8fe47012016-05-17 20:33:28 -03001933#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1934 NULL,
1935#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001936 chachapoly_setkey_wrap,
1937 chachapoly_setkey_wrap,
1938 chachapoly_ctx_alloc,
1939 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001940};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001941static const mbedtls_cipher_info_t chachapoly_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01001942 "CHACHA20-POLY1305",
Dave Rodgmande3de772023-06-24 12:51:06 +01001943 MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
Daniel King8fe47012016-05-17 20:33:28 -03001944 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Manuel Pégourié-Gonnardf57bf8b2018-06-18 11:14:09 +02001945 MBEDTLS_MODE_CHACHAPOLY,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01001946 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01001947 12 >> MBEDTLS_IV_SIZE_SHIFT,
Daniel King8fe47012016-05-17 20:33:28 -03001948 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01001949 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(1)
Daniel King8fe47012016-05-17 20:33:28 -03001950};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001951#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03001952
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001953#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Gilles Peskine449bd832023-01-11 14:50:10 +01001954static int null_crypt_stream(void *ctx, size_t length,
1955 const unsigned char *input,
1956 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001957{
1958 ((void) ctx);
Gilles Peskine449bd832023-01-11 14:50:10 +01001959 memmove(output, input, length);
1960 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001961}
1962
Gilles Peskine449bd832023-01-11 14:50:10 +01001963static int null_setkey(void *ctx, const unsigned char *key,
1964 unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001965{
1966 ((void) ctx);
1967 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001968 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001969
Gilles Peskine449bd832023-01-11 14:50:10 +01001970 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001971}
1972
Gilles Peskine449bd832023-01-11 14:50:10 +01001973static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001974{
Gilles Peskine449bd832023-01-11 14:50:10 +01001975 return (void *) 1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00001976}
1977
Gilles Peskine449bd832023-01-11 14:50:10 +01001978static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001979{
1980 ((void) ctx);
1981}
1982
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001983static const mbedtls_cipher_base_t null_base_info = {
1984 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001985 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001986#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001987 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001988#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001989#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001990 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001991#endif
Simon Butcher4844bf22018-06-11 15:21:05 +01001992#if defined(MBEDTLS_CIPHER_MODE_OFB)
1993 NULL,
1994#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001995#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001996 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001997#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01001998#if defined(MBEDTLS_CIPHER_MODE_XTS)
1999 NULL,
2000#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002001#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002002 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01002003#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02002004 null_setkey,
2005 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00002006 null_ctx_alloc,
2007 null_ctx_free
2008};
2009
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002010static const mbedtls_cipher_info_t null_cipher_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002011 "NULL",
Dave Rodgmande3de772023-06-24 12:51:06 +01002012 MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002013 MBEDTLS_CIPHER_NULL,
2014 MBEDTLS_MODE_STREAM,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002015 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01002016 0 >> MBEDTLS_IV_SIZE_SHIFT,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02002017 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01002018 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(1)
Paul Bakkerfab5c822012-02-06 16:45:10 +00002019};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002020#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00002021
Jack Lloydffdf2882019-03-07 17:00:32 -05002022#if defined(MBEDTLS_NIST_KW_C)
Gilles Peskine449bd832023-01-11 14:50:10 +01002023static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05002024{
Gilles Peskine449bd832023-01-11 14:50:10 +01002025 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05002026
Gilles Peskine449bd832023-01-11 14:50:10 +01002027 if (ctx != NULL) {
2028 mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
2029 }
Jack Lloydffdf2882019-03-07 17:00:32 -05002030
Gilles Peskine449bd832023-01-11 14:50:10 +01002031 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05002032}
2033
Gilles Peskine449bd832023-01-11 14:50:10 +01002034static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05002035{
Gilles Peskine449bd832023-01-11 14:50:10 +01002036 mbedtls_nist_kw_free(ctx);
2037 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05002038}
2039
Gilles Peskine449bd832023-01-11 14:50:10 +01002040static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
2041 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002042{
Gilles Peskine449bd832023-01-11 14:50:10 +01002043 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2044 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05002045}
2046
Gilles Peskine449bd832023-01-11 14:50:10 +01002047static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
2048 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05002049{
Gilles Peskine449bd832023-01-11 14:50:10 +01002050 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
2051 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05002052}
2053
2054static const mbedtls_cipher_base_t kw_aes_info = {
2055 MBEDTLS_CIPHER_ID_AES,
2056 NULL,
2057#if defined(MBEDTLS_CIPHER_MODE_CBC)
2058 NULL,
2059#endif
2060#if defined(MBEDTLS_CIPHER_MODE_CFB)
2061 NULL,
2062#endif
2063#if defined(MBEDTLS_CIPHER_MODE_OFB)
2064 NULL,
2065#endif
2066#if defined(MBEDTLS_CIPHER_MODE_CTR)
2067 NULL,
2068#endif
2069#if defined(MBEDTLS_CIPHER_MODE_XTS)
2070 NULL,
2071#endif
2072#if defined(MBEDTLS_CIPHER_MODE_STREAM)
2073 NULL,
2074#endif
2075 kw_aes_setkey_wrap,
2076 kw_aes_setkey_unwrap,
2077 kw_ctx_alloc,
2078 kw_ctx_free,
2079};
2080
2081static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002082 "AES-128-KW",
Dave Rodgmande3de772023-06-24 12:51:06 +01002083 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
Jack Lloydffdf2882019-03-07 17:00:32 -05002084 MBEDTLS_CIPHER_AES_128_KW,
2085 MBEDTLS_MODE_KW,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002086 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01002087 0 >> MBEDTLS_IV_SIZE_SHIFT,
Jack Lloydffdf2882019-03-07 17:00:32 -05002088 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01002089 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Jack Lloydffdf2882019-03-07 17:00:32 -05002090};
2091
2092static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002093 "AES-192-KW",
Dave Rodgmande3de772023-06-24 12:51:06 +01002094 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
Jack Lloydffdf2882019-03-07 17:00:32 -05002095 MBEDTLS_CIPHER_AES_192_KW,
2096 MBEDTLS_MODE_KW,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002097 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01002098 0 >> MBEDTLS_IV_SIZE_SHIFT,
Jack Lloydffdf2882019-03-07 17:00:32 -05002099 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01002100 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Jack Lloydffdf2882019-03-07 17:00:32 -05002101};
2102
2103static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002104 "AES-256-KW",
Dave Rodgmande3de772023-06-24 12:51:06 +01002105 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
Jack Lloydffdf2882019-03-07 17:00:32 -05002106 MBEDTLS_CIPHER_AES_256_KW,
2107 MBEDTLS_MODE_KW,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002108 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01002109 0 >> MBEDTLS_IV_SIZE_SHIFT,
Jack Lloydffdf2882019-03-07 17:00:32 -05002110 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01002111 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Jack Lloydffdf2882019-03-07 17:00:32 -05002112};
2113
2114static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002115 "AES-128-KWP",
Dave Rodgmande3de772023-06-24 12:51:06 +01002116 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
Jack Lloydffdf2882019-03-07 17:00:32 -05002117 MBEDTLS_CIPHER_AES_128_KWP,
2118 MBEDTLS_MODE_KWP,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002119 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01002120 0 >> MBEDTLS_IV_SIZE_SHIFT,
Jack Lloydffdf2882019-03-07 17:00:32 -05002121 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01002122 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Jack Lloydffdf2882019-03-07 17:00:32 -05002123};
2124
2125static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002126 "AES-192-KWP",
Dave Rodgmande3de772023-06-24 12:51:06 +01002127 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
Jack Lloydffdf2882019-03-07 17:00:32 -05002128 MBEDTLS_CIPHER_AES_192_KWP,
2129 MBEDTLS_MODE_KWP,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002130 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01002131 0 >> MBEDTLS_IV_SIZE_SHIFT,
Jack Lloydffdf2882019-03-07 17:00:32 -05002132 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01002133 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Jack Lloydffdf2882019-03-07 17:00:32 -05002134};
2135
2136static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
Dave Rodgman3319ae92023-06-24 10:55:04 +01002137 "AES-256-KWP",
Dave Rodgmande3de772023-06-24 12:51:06 +01002138 MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
Jack Lloydffdf2882019-03-07 17:00:32 -05002139 MBEDTLS_CIPHER_AES_256_KWP,
2140 MBEDTLS_MODE_KWP,
Dave Rodgman6c6c8422023-06-24 11:14:34 +01002141 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
Dave Rodgman0ffb68e2023-06-24 11:30:45 +01002142 0 >> MBEDTLS_IV_SIZE_SHIFT,
Jack Lloydffdf2882019-03-07 17:00:32 -05002143 0,
Dave Rodgman85a88132023-06-24 11:41:50 +01002144 MBEDTLS_CIPHER_BLOCK_SIZE_PACK(16)
Jack Lloydffdf2882019-03-07 17:00:32 -05002145};
2146#endif /* MBEDTLS_NIST_KW_C */
2147
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002148const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002149{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002150#if defined(MBEDTLS_AES_C)
2151 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2152 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2153 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2154#if defined(MBEDTLS_CIPHER_MODE_CBC)
2155 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2156 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2157 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002158#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002159#if defined(MBEDTLS_CIPHER_MODE_CFB)
2160 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2161 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2162 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002163#endif
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01002164#if defined(MBEDTLS_CIPHER_MODE_OFB)
2165 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2166 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2167 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2168#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002169#if defined(MBEDTLS_CIPHER_MODE_CTR)
2170 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2171 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2172 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002173#endif
Jaeden Ameroc6539902018-04-30 17:17:41 +01002174#if defined(MBEDTLS_CIPHER_MODE_XTS)
2175 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2176 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2177#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002178#if defined(MBEDTLS_GCM_C)
2179 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2180 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2181 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002182#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002183#if defined(MBEDTLS_CCM_C)
2184 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2185 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2186 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002187 { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
2188 { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
2189 { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002190#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002191#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002192
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002193#if defined(MBEDTLS_CAMELLIA_C)
2194 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2195 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2196 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2197#if defined(MBEDTLS_CIPHER_MODE_CBC)
2198 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2199 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2200 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002201#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002202#if defined(MBEDTLS_CIPHER_MODE_CFB)
2203 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2204 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2205 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002206#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002207#if defined(MBEDTLS_CIPHER_MODE_CTR)
2208 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2209 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2210 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002211#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002212#if defined(MBEDTLS_GCM_C)
2213 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2214 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2215 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02002216#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002217#if defined(MBEDTLS_CCM_C)
2218 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2219 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2220 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002221 { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
2222 { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
2223 { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02002224#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002225#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002226
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002227#if defined(MBEDTLS_ARIA_C)
2228 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2229 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2230 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2231#if defined(MBEDTLS_CIPHER_MODE_CBC)
2232 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2233 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2234 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2235#endif
2236#if defined(MBEDTLS_CIPHER_MODE_CFB)
2237 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2238 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2239 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2240#endif
2241#if defined(MBEDTLS_CIPHER_MODE_CTR)
2242 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2243 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2244 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2245#endif
2246#if defined(MBEDTLS_GCM_C)
2247 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2248 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2249 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2250#endif
2251#if defined(MBEDTLS_CCM_C)
2252 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2253 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2254 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
Mateusz Starzyk4cb97392021-10-27 10:42:31 +02002255 { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
2256 { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
2257 { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002258#endif
2259#endif /* MBEDTLS_ARIA_C */
2260
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002261#if defined(MBEDTLS_DES_C)
2262 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2263 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2264 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2265#if defined(MBEDTLS_CIPHER_MODE_CBC)
2266 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2267 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2268 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002269#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002270#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002271
Daniel Kingbd920622016-05-15 19:56:20 -03002272#if defined(MBEDTLS_CHACHA20_C)
2273 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2274#endif
2275
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02002276#if defined(MBEDTLS_CHACHAPOLY_C)
2277 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03002278#endif
2279
Jack Lloydffdf2882019-03-07 17:00:32 -05002280#if defined(MBEDTLS_NIST_KW_C)
2281 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2282 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2283 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2284 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2285 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2286 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2287#endif
2288
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002289#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2290 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2291#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002292
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002293 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002294};
2295
Gilles Peskine449bd832023-01-11 14:50:10 +01002296#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
2297 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002298int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002299
Dave Rodgman3b46b772023-06-24 13:25:06 +01002300const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
Dave Rodgmande3de772023-06-24 12:51:06 +01002301#if defined(MBEDTLS_AES_C)
2302 &aes_info,
2303#else
2304 NULL,
2305#endif
2306#if defined(MBEDTLS_ARIA_C)
2307 &aria_info,
2308#else
2309 NULL,
2310#endif
2311#if defined(MBEDTLS_CAMELLIA_C)
2312 &camellia_info,
2313#else
2314 NULL,
2315#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002316#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002317 &ccm_aes_info,
2318#else
2319 NULL,
2320#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002321#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002322 &ccm_aria_info,
2323#else
2324 NULL,
2325#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002326#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002327 &ccm_camellia_info,
2328#else
2329 NULL,
2330#endif
2331#if defined(MBEDTLS_CHACHA20_C)
2332 &chacha20_base_info,
2333#else
2334 NULL,
2335#endif
2336#if defined(MBEDTLS_CHACHAPOLY_C)
2337 &chachapoly_base_info,
2338#else
2339 NULL,
2340#endif
2341#if defined(MBEDTLS_DES_C)
2342 &des_ede3_info,
2343#else
2344 NULL,
2345#endif
2346#if defined(MBEDTLS_DES_C)
2347 &des_ede_info,
2348#else
2349 NULL,
2350#endif
2351#if defined(MBEDTLS_DES_C)
2352 &des_info,
2353#else
2354 NULL,
2355#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002356#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002357 &gcm_aes_info,
2358#else
2359 NULL,
2360#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002361#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002362 &gcm_aria_info,
2363#else
2364 NULL,
2365#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002366#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002367 &gcm_camellia_info,
2368#else
2369 NULL,
2370#endif
2371#if defined(MBEDTLS_NIST_KW_C)
2372 &kw_aes_info,
2373#else
2374 NULL,
2375#endif
2376#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2377 &null_base_info,
2378#else
2379 NULL,
2380#endif
Dave Rodgman77049b82023-06-24 14:39:47 +01002381#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
Dave Rodgmande3de772023-06-24 12:51:06 +01002382 &xts_aes_info,
2383#else
2384 NULL,
2385#endif
2386};
2387
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002388#endif /* MBEDTLS_CIPHER_C */