blob: 086227d70ebdf0a2d136561cb2f991b7ffb525f5 [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
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020028# include "cipher_wrap.h"
29# include "mbedtls/error.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000030
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020031# if defined(MBEDTLS_CHACHAPOLY_C)
32# include "mbedtls/chachapoly.h"
33# endif
Daniel King8fe47012016-05-17 20:33:28 -030034
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020035# if defined(MBEDTLS_AES_C)
36# include "mbedtls/aes.h"
37# endif
Paul Bakkerf6543712012-03-05 14:01:29 +000038
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020039# if defined(MBEDTLS_CAMELLIA_C)
40# include "mbedtls/camellia.h"
41# endif
Paul Bakkerf6543712012-03-05 14:01:29 +000042
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020043# if defined(MBEDTLS_ARIA_C)
44# include "mbedtls/aria.h"
45# endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +000046
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020047# if defined(MBEDTLS_DES_C)
48# include "mbedtls/des.h"
49# endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000050
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020051# if defined(MBEDTLS_CHACHA20_C)
52# include "mbedtls/chacha20.h"
53# endif
Daniel Kingbd920622016-05-15 19:56:20 -030054
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020055# if defined(MBEDTLS_GCM_C)
56# include "mbedtls/gcm.h"
57# endif
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020058
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020059# if defined(MBEDTLS_CCM_C)
60# include "mbedtls/ccm.h"
61# endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020062
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020063# if defined(MBEDTLS_NIST_KW_C)
64# include "mbedtls/nist_kw.h"
65# endif
Jack Lloydffdf2882019-03-07 17:00:32 -050066
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020067# if defined(MBEDTLS_CIPHER_NULL_CIPHER)
68# include <string.h>
69# endif
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000070
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020071# if defined(MBEDTLS_PLATFORM_C)
72# include "mbedtls/platform.h"
73# else
74# include <stdlib.h>
75# define mbedtls_calloc calloc
76# define mbedtls_free free
77# endif
Paul Bakker6e339b52013-07-03 13:37:05 +020078
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020079# if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020080/* shared by all GCM ciphers */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020081static void *gcm_ctx_alloc(void)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020082{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020083 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020084
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020085 if (ctx != NULL)
86 mbedtls_gcm_init((mbedtls_gcm_context *)ctx);
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020087
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020088 return ctx;
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020089}
90
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020091static void gcm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020092{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020093 mbedtls_gcm_free(ctx);
94 mbedtls_free(ctx);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020095}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020096# endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020097
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020098# if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020099/* shared by all CCM ciphers */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200100static void *ccm_ctx_alloc(void)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200101{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200102 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200103
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200104 if (ctx != NULL)
105 mbedtls_ccm_init((mbedtls_ccm_context *)ctx);
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200106
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200107 return ctx;
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200108}
109
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200110static void ccm_ctx_free(void *ctx)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200111{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200112 mbedtls_ccm_free(ctx);
113 mbedtls_free(ctx);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200114}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200115# endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200116
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200117# if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000118
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200119static int aes_crypt_ecb_wrap(void *ctx,
120 mbedtls_operation_t operation,
121 const unsigned char *input,
122 unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200123{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200124 return mbedtls_aes_crypt_ecb((mbedtls_aes_context *)ctx, operation, input,
125 output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200126}
127
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200128# if defined(MBEDTLS_CIPHER_MODE_CBC)
129static int aes_crypt_cbc_wrap(void *ctx,
130 mbedtls_operation_t operation,
131 size_t length,
132 unsigned char *iv,
133 const unsigned char *input,
134 unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000135{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200136 return mbedtls_aes_crypt_cbc((mbedtls_aes_context *)ctx, operation, length,
137 iv, input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000138}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200139# endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000140
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200141# if defined(MBEDTLS_CIPHER_MODE_CFB)
142static int aes_crypt_cfb128_wrap(void *ctx,
143 mbedtls_operation_t operation,
144 size_t length,
145 size_t *iv_off,
146 unsigned char *iv,
147 const unsigned char *input,
148 unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000149{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200150 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *)ctx, operation,
151 length, iv_off, iv, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000152}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200153# endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000154
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200155# if defined(MBEDTLS_CIPHER_MODE_OFB)
156static int aes_crypt_ofb_wrap(void *ctx,
157 size_t length,
158 size_t *iv_off,
159 unsigned char *iv,
160 const unsigned char *input,
161 unsigned char *output)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100162{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200163 return mbedtls_aes_crypt_ofb((mbedtls_aes_context *)ctx, length, iv_off, iv,
164 input, output);
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100165}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200166# endif /* MBEDTLS_CIPHER_MODE_OFB */
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100167
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200168# if defined(MBEDTLS_CIPHER_MODE_CTR)
169static int aes_crypt_ctr_wrap(void *ctx,
170 size_t length,
171 size_t *nc_off,
172 unsigned char *nonce_counter,
173 unsigned char *stream_block,
174 const unsigned char *input,
175 unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000176{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200177 return mbedtls_aes_crypt_ctr((mbedtls_aes_context *)ctx, length, nc_off,
178 nonce_counter, stream_block, input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000179}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200180# endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000181
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200182# if defined(MBEDTLS_CIPHER_MODE_XTS)
183static int aes_crypt_xts_wrap(void *ctx,
184 mbedtls_operation_t operation,
185 size_t length,
186 const unsigned char data_unit[16],
187 const unsigned char *input,
188 unsigned char *output)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100189{
190 mbedtls_aes_xts_context *xts_ctx = ctx;
191 int mode;
192
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200193 switch (operation) {
Jaeden Ameroc6539902018-04-30 17:17:41 +0100194 case MBEDTLS_ENCRYPT:
195 mode = MBEDTLS_AES_ENCRYPT;
196 break;
197 case MBEDTLS_DECRYPT:
198 mode = MBEDTLS_AES_DECRYPT;
199 break;
200 default:
201 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
202 }
203
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200204 return mbedtls_aes_crypt_xts(xts_ctx, mode, length, data_unit, input,
205 output);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100206}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200207# endif /* MBEDTLS_CIPHER_MODE_XTS */
Jaeden Ameroc6539902018-04-30 17:17:41 +0100208
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200209static int aes_setkey_dec_wrap(void *ctx,
210 const unsigned char *key,
211 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000212{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200213 return mbedtls_aes_setkey_dec((mbedtls_aes_context *)ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000214}
215
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200216static int aes_setkey_enc_wrap(void *ctx,
217 const unsigned char *key,
218 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000219{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200220 return mbedtls_aes_setkey_enc((mbedtls_aes_context *)ctx, key, key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000221}
222
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200223static void *aes_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000224{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200225 mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200226
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200227 if (aes == NULL)
228 return NULL;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200229
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200230 mbedtls_aes_init(aes);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200231
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200232 return aes;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000233}
234
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200235static void aes_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000236{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200237 mbedtls_aes_free((mbedtls_aes_context *)ctx);
238 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000239}
240
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200241static const mbedtls_cipher_base_t aes_info = { MBEDTLS_CIPHER_ID_AES,
242 aes_crypt_ecb_wrap,
243# if defined(MBEDTLS_CIPHER_MODE_CBC)
244 aes_crypt_cbc_wrap,
245# endif
246# if defined(MBEDTLS_CIPHER_MODE_CFB)
247 aes_crypt_cfb128_wrap,
248# endif
249# if defined(MBEDTLS_CIPHER_MODE_OFB)
250 aes_crypt_ofb_wrap,
251# endif
252# if defined(MBEDTLS_CIPHER_MODE_CTR)
253 aes_crypt_ctr_wrap,
254# endif
255# if defined(MBEDTLS_CIPHER_MODE_XTS)
256 NULL,
257# endif
258# if defined(MBEDTLS_CIPHER_MODE_STREAM)
259 NULL,
260# endif
261 aes_setkey_enc_wrap,
262 aes_setkey_dec_wrap,
263 aes_ctx_alloc,
264 aes_ctx_free };
Paul Bakker343a8702011-06-09 14:27:58 +0000265
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200266static const mbedtls_cipher_info_t aes_128_ecb_info = {
267 MBEDTLS_CIPHER_AES_128_ECB,
268 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200269 128,
270 "AES-128-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300271 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200272 0,
273 16,
274 &aes_info
275};
276
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200277static const mbedtls_cipher_info_t aes_192_ecb_info = {
278 MBEDTLS_CIPHER_AES_192_ECB,
279 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200280 192,
281 "AES-192-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300282 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200283 0,
284 16,
285 &aes_info
286};
287
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200288static const mbedtls_cipher_info_t aes_256_ecb_info = {
289 MBEDTLS_CIPHER_AES_256_ECB,
290 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200291 256,
292 "AES-256-ECB",
Ron Eldor4e64e0b2017-09-25 18:22:32 +0300293 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200294 0,
295 16,
296 &aes_info
297};
298
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200299# if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200300static const mbedtls_cipher_info_t aes_128_cbc_info = {
301 MBEDTLS_CIPHER_AES_128_CBC,
302 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000303 128,
304 "AES-128-CBC",
305 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200306 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000307 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000308 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000309};
310
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200311static const mbedtls_cipher_info_t aes_192_cbc_info = {
312 MBEDTLS_CIPHER_AES_192_CBC,
313 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000314 192,
315 "AES-192-CBC",
316 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200317 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000318 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000319 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000320};
321
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200322static const mbedtls_cipher_info_t aes_256_cbc_info = {
323 MBEDTLS_CIPHER_AES_256_CBC,
324 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000325 256,
326 "AES-256-CBC",
327 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200328 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000329 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000330 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000331};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200332# endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000333
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200334# if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200335static const mbedtls_cipher_info_t aes_128_cfb128_info = {
336 MBEDTLS_CIPHER_AES_128_CFB128,
337 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000338 128,
339 "AES-128-CFB128",
340 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200341 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000342 16,
343 &aes_info
344};
345
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200346static const mbedtls_cipher_info_t aes_192_cfb128_info = {
347 MBEDTLS_CIPHER_AES_192_CFB128,
348 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000349 192,
350 "AES-192-CFB128",
351 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200352 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000353 16,
354 &aes_info
355};
356
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200357static const mbedtls_cipher_info_t aes_256_cfb128_info = {
358 MBEDTLS_CIPHER_AES_256_CFB128,
359 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000360 256,
361 "AES-256-CFB128",
362 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200363 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000364 16,
365 &aes_info
366};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200367# endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000368
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200369# if defined(MBEDTLS_CIPHER_MODE_OFB)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100370static const mbedtls_cipher_info_t aes_128_ofb_info = {
371 MBEDTLS_CIPHER_AES_128_OFB,
372 MBEDTLS_MODE_OFB,
373 128,
374 "AES-128-OFB",
375 16,
376 0,
377 16,
378 &aes_info
379};
380
381static const mbedtls_cipher_info_t aes_192_ofb_info = {
382 MBEDTLS_CIPHER_AES_192_OFB,
383 MBEDTLS_MODE_OFB,
384 192,
385 "AES-192-OFB",
386 16,
387 0,
388 16,
389 &aes_info
390};
391
392static const mbedtls_cipher_info_t aes_256_ofb_info = {
393 MBEDTLS_CIPHER_AES_256_OFB,
394 MBEDTLS_MODE_OFB,
395 256,
396 "AES-256-OFB",
397 16,
398 0,
399 16,
400 &aes_info
401};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200402# endif /* MBEDTLS_CIPHER_MODE_OFB */
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100403
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200404# if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200405static const mbedtls_cipher_info_t aes_128_ctr_info = {
406 MBEDTLS_CIPHER_AES_128_CTR,
407 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000408 128,
409 "AES-128-CTR",
410 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200411 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000412 16,
413 &aes_info
414};
415
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200416static const mbedtls_cipher_info_t aes_192_ctr_info = {
417 MBEDTLS_CIPHER_AES_192_CTR,
418 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000419 192,
420 "AES-192-CTR",
421 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200422 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000423 16,
424 &aes_info
425};
426
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200427static const mbedtls_cipher_info_t aes_256_ctr_info = {
428 MBEDTLS_CIPHER_AES_256_CTR,
429 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000430 256,
431 "AES-256-CTR",
432 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200433 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000434 16,
435 &aes_info
436};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200437# endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000438
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200439# if defined(MBEDTLS_CIPHER_MODE_XTS)
440static int xts_aes_setkey_enc_wrap(void *ctx,
441 const unsigned char *key,
442 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100443{
444 mbedtls_aes_xts_context *xts_ctx = ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200445 return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100446}
447
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200448static int xts_aes_setkey_dec_wrap(void *ctx,
449 const unsigned char *key,
450 unsigned int key_bitlen)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100451{
452 mbedtls_aes_xts_context *xts_ctx = ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200453 return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100454}
455
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200456static void *xts_aes_ctx_alloc(void)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100457{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200458 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
Jaeden Ameroc6539902018-04-30 17:17:41 +0100459
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200460 if (xts_ctx != NULL)
461 mbedtls_aes_xts_init(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100462
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200463 return xts_ctx;
Jaeden Ameroc6539902018-04-30 17:17:41 +0100464}
465
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200466static void xts_aes_ctx_free(void *ctx)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100467{
468 mbedtls_aes_xts_context *xts_ctx = ctx;
469
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200470 if (xts_ctx == NULL)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100471 return;
472
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200473 mbedtls_aes_xts_free(xts_ctx);
474 mbedtls_free(xts_ctx);
Jaeden Ameroc6539902018-04-30 17:17:41 +0100475}
476
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200477static const mbedtls_cipher_base_t xts_aes_info = { MBEDTLS_CIPHER_ID_AES,
478 NULL,
479# if defined(MBEDTLS_CIPHER_MODE_CBC)
480 NULL,
481# endif
482# if defined(MBEDTLS_CIPHER_MODE_CFB)
483 NULL,
484# endif
485# if defined(MBEDTLS_CIPHER_MODE_OFB)
486 NULL,
487# endif
488# if defined(MBEDTLS_CIPHER_MODE_CTR)
489 NULL,
490# endif
491# if defined(MBEDTLS_CIPHER_MODE_XTS)
492 aes_crypt_xts_wrap,
493# endif
494# if defined(MBEDTLS_CIPHER_MODE_STREAM)
495 NULL,
496# endif
497 xts_aes_setkey_enc_wrap,
498 xts_aes_setkey_dec_wrap,
499 xts_aes_ctx_alloc,
500 xts_aes_ctx_free };
Jaeden Ameroc6539902018-04-30 17:17:41 +0100501
502static const mbedtls_cipher_info_t aes_128_xts_info = {
503 MBEDTLS_CIPHER_AES_128_XTS,
504 MBEDTLS_MODE_XTS,
505 256,
506 "AES-128-XTS",
507 16,
508 0,
509 16,
510 &xts_aes_info
511};
512
513static const mbedtls_cipher_info_t aes_256_xts_info = {
514 MBEDTLS_CIPHER_AES_256_XTS,
515 MBEDTLS_MODE_XTS,
516 512,
517 "AES-256-XTS",
518 16,
519 0,
520 16,
521 &xts_aes_info
522};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200523# endif /* MBEDTLS_CIPHER_MODE_XTS */
Jaeden Ameroc6539902018-04-30 17:17:41 +0100524
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200525# if defined(MBEDTLS_GCM_C)
526static int gcm_aes_setkey_wrap(void *ctx,
527 const unsigned char *key,
528 unsigned int key_bitlen)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200529{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200530 return mbedtls_gcm_setkey((mbedtls_gcm_context *)ctx, MBEDTLS_CIPHER_ID_AES,
531 key, key_bitlen);
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200532}
533
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200534static const mbedtls_cipher_base_t gcm_aes_info = {
535 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200536 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200537# if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200538 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200539# endif
540# if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200541 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200542# endif
543# if defined(MBEDTLS_CIPHER_MODE_OFB)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100544 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200545# endif
546# if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200547 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200548# endif
549# if defined(MBEDTLS_CIPHER_MODE_XTS)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100550 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200551# endif
552# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200553 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200554# endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200555 gcm_aes_setkey_wrap,
556 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200557 gcm_ctx_alloc,
558 gcm_ctx_free,
559};
560
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200561static const mbedtls_cipher_info_t aes_128_gcm_info = {
562 MBEDTLS_CIPHER_AES_128_GCM,
563 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100564 128,
565 "AES-128-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200566 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200567 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100568 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200569 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100570};
571
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200572static const mbedtls_cipher_info_t aes_192_gcm_info = {
573 MBEDTLS_CIPHER_AES_192_GCM,
574 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200575 192,
576 "AES-192-GCM",
577 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200578 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200579 16,
580 &gcm_aes_info
581};
582
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200583static const mbedtls_cipher_info_t aes_256_gcm_info = {
584 MBEDTLS_CIPHER_AES_256_GCM,
585 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100586 256,
587 "AES-256-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200588 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200589 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100590 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200591 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100592};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200593# endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100594
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200595# if defined(MBEDTLS_CCM_C)
596static int ccm_aes_setkey_wrap(void *ctx,
597 const unsigned char *key,
598 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200599{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200600 return mbedtls_ccm_setkey((mbedtls_ccm_context *)ctx, MBEDTLS_CIPHER_ID_AES,
601 key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200602}
603
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200604static const mbedtls_cipher_base_t ccm_aes_info = {
605 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200606 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200607# if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200608 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200609# endif
610# if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200611 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200612# endif
613# if defined(MBEDTLS_CIPHER_MODE_OFB)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100614 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200615# endif
616# if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200617 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200618# endif
619# if defined(MBEDTLS_CIPHER_MODE_XTS)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100620 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200621# endif
622# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200623 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200624# endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200625 ccm_aes_setkey_wrap,
626 ccm_aes_setkey_wrap,
627 ccm_ctx_alloc,
628 ccm_ctx_free,
629};
630
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200631static const mbedtls_cipher_info_t aes_128_ccm_info = {
632 MBEDTLS_CIPHER_AES_128_CCM,
633 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200634 128,
635 "AES-128-CCM",
636 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200637 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200638 16,
639 &ccm_aes_info
640};
641
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200642static const mbedtls_cipher_info_t aes_192_ccm_info = {
643 MBEDTLS_CIPHER_AES_192_CCM,
644 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200645 192,
646 "AES-192-CCM",
647 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200648 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200649 16,
650 &ccm_aes_info
651};
652
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200653static const mbedtls_cipher_info_t aes_256_ccm_info = {
654 MBEDTLS_CIPHER_AES_256_CCM,
655 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200656 256,
657 "AES-256-CCM",
658 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200659 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200660 16,
661 &ccm_aes_info
662};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200663# endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200664
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200665# endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000666
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200667# if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000668
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200669static int camellia_crypt_ecb_wrap(void *ctx,
670 mbedtls_operation_t operation,
671 const unsigned char *input,
672 unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200673{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200674 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *)ctx,
675 operation, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +0200676}
677
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200678# if defined(MBEDTLS_CIPHER_MODE_CBC)
679static int camellia_crypt_cbc_wrap(void *ctx,
680 mbedtls_operation_t operation,
681 size_t length,
682 unsigned char *iv,
683 const unsigned char *input,
684 unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000685{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200686 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *)ctx,
687 operation, length, iv, input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000688}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200689# endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000690
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200691# if defined(MBEDTLS_CIPHER_MODE_CFB)
692static int camellia_crypt_cfb128_wrap(void *ctx,
693 mbedtls_operation_t operation,
694 size_t length,
695 size_t *iv_off,
696 unsigned char *iv,
697 const unsigned char *input,
698 unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000699{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200700 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *)ctx,
701 operation, length, iv_off, iv, input,
702 output);
Paul Bakker343a8702011-06-09 14:27:58 +0000703}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200704# endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000705
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200706# if defined(MBEDTLS_CIPHER_MODE_CTR)
707static int camellia_crypt_ctr_wrap(void *ctx,
708 size_t length,
709 size_t *nc_off,
710 unsigned char *nonce_counter,
711 unsigned char *stream_block,
712 const unsigned char *input,
713 unsigned char *output)
Paul Bakker343a8702011-06-09 14:27:58 +0000714{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200715 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *)ctx, length,
716 nc_off, nonce_counter, stream_block,
717 input, output);
Paul Bakker343a8702011-06-09 14:27:58 +0000718}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200719# endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000720
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200721static int camellia_setkey_dec_wrap(void *ctx,
722 const unsigned char *key,
723 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000724{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200725 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *)ctx, key,
726 key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000727}
728
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200729static int camellia_setkey_enc_wrap(void *ctx,
730 const unsigned char *key,
731 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000732{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200733 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *)ctx, key,
734 key_bitlen);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000735}
736
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200737static void *camellia_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000738{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200739 mbedtls_camellia_context *ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200740 ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200741
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200742 if (ctx == NULL)
743 return NULL;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200744
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200745 mbedtls_camellia_init(ctx);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200746
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200747 return ctx;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000748}
749
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200750static void camellia_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000751{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200752 mbedtls_camellia_free((mbedtls_camellia_context *)ctx);
753 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +0000754}
755
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200756static const mbedtls_cipher_base_t camellia_info = { MBEDTLS_CIPHER_ID_CAMELLIA,
757 camellia_crypt_ecb_wrap,
758# if defined(MBEDTLS_CIPHER_MODE_CBC)
759 camellia_crypt_cbc_wrap,
760# endif
761# if defined(MBEDTLS_CIPHER_MODE_CFB)
762 camellia_crypt_cfb128_wrap,
763# endif
764# if defined(MBEDTLS_CIPHER_MODE_OFB)
765 NULL,
766# endif
767# if defined(MBEDTLS_CIPHER_MODE_CTR)
768 camellia_crypt_ctr_wrap,
769# endif
770# if defined(MBEDTLS_CIPHER_MODE_XTS)
771 NULL,
772# endif
773# if defined(MBEDTLS_CIPHER_MODE_STREAM)
774 NULL,
775# endif
776 camellia_setkey_enc_wrap,
777 camellia_setkey_dec_wrap,
778 camellia_ctx_alloc,
779 camellia_ctx_free };
Paul Bakker343a8702011-06-09 14:27:58 +0000780
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200781static const mbedtls_cipher_info_t camellia_128_ecb_info = {
782 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
783 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200784 128,
785 "CAMELLIA-128-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100786 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200787 0,
788 16,
789 &camellia_info
790};
791
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200792static const mbedtls_cipher_info_t camellia_192_ecb_info = {
793 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
794 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200795 192,
796 "CAMELLIA-192-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100797 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200798 0,
799 16,
800 &camellia_info
801};
802
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200803static const mbedtls_cipher_info_t camellia_256_ecb_info = {
804 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
805 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200806 256,
807 "CAMELLIA-256-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +0100808 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200809 0,
810 16,
811 &camellia_info
812};
813
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200814# if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200815static const mbedtls_cipher_info_t camellia_128_cbc_info = {
816 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
817 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000818 128,
819 "CAMELLIA-128-CBC",
820 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200821 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000822 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000823 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000824};
825
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200826static const mbedtls_cipher_info_t camellia_192_cbc_info = {
827 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
828 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000829 192,
830 "CAMELLIA-192-CBC",
831 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200832 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000833 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000834 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000835};
836
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200837static const mbedtls_cipher_info_t camellia_256_cbc_info = {
838 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
839 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000840 256,
841 "CAMELLIA-256-CBC",
842 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200843 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000844 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000845 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000846};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200847# endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000848
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200849# if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200850static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
851 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
852 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000853 128,
854 "CAMELLIA-128-CFB128",
855 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200856 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000857 16,
858 &camellia_info
859};
860
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200861static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
862 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
863 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000864 192,
865 "CAMELLIA-192-CFB128",
866 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200867 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000868 16,
869 &camellia_info
870};
871
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200872static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
873 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
874 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000875 256,
876 "CAMELLIA-256-CFB128",
877 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200878 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000879 16,
880 &camellia_info
881};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200882# endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000883
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200884# if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200885static const mbedtls_cipher_info_t camellia_128_ctr_info = {
886 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
887 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000888 128,
889 "CAMELLIA-128-CTR",
890 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200891 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000892 16,
893 &camellia_info
894};
895
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200896static const mbedtls_cipher_info_t camellia_192_ctr_info = {
897 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
898 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000899 192,
900 "CAMELLIA-192-CTR",
901 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200902 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000903 16,
904 &camellia_info
905};
906
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200907static const mbedtls_cipher_info_t camellia_256_ctr_info = {
908 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
909 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000910 256,
911 "CAMELLIA-256-CTR",
912 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200913 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000914 16,
915 &camellia_info
916};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200917# endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000918
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200919# if defined(MBEDTLS_GCM_C)
920static int gcm_camellia_setkey_wrap(void *ctx,
921 const unsigned char *key,
922 unsigned int key_bitlen)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200923{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200924 return mbedtls_gcm_setkey((mbedtls_gcm_context *)ctx,
925 MBEDTLS_CIPHER_ID_CAMELLIA, key, key_bitlen);
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200926}
927
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200928static const mbedtls_cipher_base_t gcm_camellia_info = {
929 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200930 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200931# if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200932 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200933# endif
934# if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200935 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200936# endif
937# if defined(MBEDTLS_CIPHER_MODE_OFB)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +0100938 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200939# endif
940# if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200941 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200942# endif
943# if defined(MBEDTLS_CIPHER_MODE_XTS)
Jaeden Ameroc6539902018-04-30 17:17:41 +0100944 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200945# endif
946# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200947 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200948# endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200949 gcm_camellia_setkey_wrap,
950 gcm_camellia_setkey_wrap,
951 gcm_ctx_alloc,
952 gcm_ctx_free,
953};
954
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200955static const mbedtls_cipher_info_t camellia_128_gcm_info = {
956 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
957 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200958 128,
959 "CAMELLIA-128-GCM",
960 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200961 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200962 16,
963 &gcm_camellia_info
964};
965
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200966static const mbedtls_cipher_info_t camellia_192_gcm_info = {
967 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
968 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200969 192,
970 "CAMELLIA-192-GCM",
971 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200972 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200973 16,
974 &gcm_camellia_info
975};
976
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200977static const mbedtls_cipher_info_t camellia_256_gcm_info = {
978 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
979 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200980 256,
981 "CAMELLIA-256-GCM",
982 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200983 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200984 16,
985 &gcm_camellia_info
986};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200987# endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200988
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200989# if defined(MBEDTLS_CCM_C)
990static int ccm_camellia_setkey_wrap(void *ctx,
991 const unsigned char *key,
992 unsigned int key_bitlen)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200993{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200994 return mbedtls_ccm_setkey((mbedtls_ccm_context *)ctx,
995 MBEDTLS_CIPHER_ID_CAMELLIA, key, key_bitlen);
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200996}
997
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200998static const mbedtls_cipher_base_t ccm_camellia_info = {
999 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001000 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001001# if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001002 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001003# endif
1004# if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001005 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001006# endif
1007# if defined(MBEDTLS_CIPHER_MODE_OFB)
Simon Butcher8c0fd1e2018-04-22 22:58:07 +01001008 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001009# endif
1010# if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001011 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001012# endif
1013# if defined(MBEDTLS_CIPHER_MODE_XTS)
Jaeden Ameroc6539902018-04-30 17:17:41 +01001014 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001015# endif
1016# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001017 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001018# endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001019 ccm_camellia_setkey_wrap,
1020 ccm_camellia_setkey_wrap,
1021 ccm_ctx_alloc,
1022 ccm_ctx_free,
1023};
1024
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001025static const mbedtls_cipher_info_t camellia_128_ccm_info = {
1026 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
1027 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001028 128,
1029 "CAMELLIA-128-CCM",
1030 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001031 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001032 16,
1033 &ccm_camellia_info
1034};
1035
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001036static const mbedtls_cipher_info_t camellia_192_ccm_info = {
1037 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
1038 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001039 192,
1040 "CAMELLIA-192-CCM",
1041 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001042 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001043 16,
1044 &ccm_camellia_info
1045};
1046
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001047static const mbedtls_cipher_info_t camellia_256_ccm_info = {
1048 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
1049 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001050 256,
1051 "CAMELLIA-256-CCM",
1052 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001053 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001054 16,
1055 &ccm_camellia_info
1056};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001057# endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001058
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001059# endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001060
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001061# if defined(MBEDTLS_ARIA_C)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001062
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001063static int aria_crypt_ecb_wrap(void *ctx,
1064 mbedtls_operation_t operation,
1065 const unsigned char *input,
1066 unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001067{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001068 (void)operation;
1069 return mbedtls_aria_crypt_ecb((mbedtls_aria_context *)ctx, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001070}
1071
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001072# if defined(MBEDTLS_CIPHER_MODE_CBC)
1073static int aria_crypt_cbc_wrap(void *ctx,
1074 mbedtls_operation_t operation,
1075 size_t length,
1076 unsigned char *iv,
1077 const unsigned char *input,
1078 unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001079{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001080 return mbedtls_aria_crypt_cbc((mbedtls_aria_context *)ctx, operation,
1081 length, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001082}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001083# endif /* MBEDTLS_CIPHER_MODE_CBC */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001084
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001085# if defined(MBEDTLS_CIPHER_MODE_CFB)
1086static int aria_crypt_cfb128_wrap(void *ctx,
1087 mbedtls_operation_t operation,
1088 size_t length,
1089 size_t *iv_off,
1090 unsigned char *iv,
1091 const unsigned char *input,
1092 unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001093{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001094 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *)ctx, operation,
1095 length, iv_off, iv, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001096}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001097# endif /* MBEDTLS_CIPHER_MODE_CFB */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001098
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001099# if defined(MBEDTLS_CIPHER_MODE_CTR)
1100static int aria_crypt_ctr_wrap(void *ctx,
1101 size_t length,
1102 size_t *nc_off,
1103 unsigned char *nonce_counter,
1104 unsigned char *stream_block,
1105 const unsigned char *input,
1106 unsigned char *output)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001107{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001108 return mbedtls_aria_crypt_ctr((mbedtls_aria_context *)ctx, length, nc_off,
1109 nonce_counter, stream_block, input, output);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001110}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001111# endif /* MBEDTLS_CIPHER_MODE_CTR */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001112
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001113static int aria_setkey_dec_wrap(void *ctx,
1114 const unsigned char *key,
1115 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001116{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001117 return mbedtls_aria_setkey_dec((mbedtls_aria_context *)ctx, key,
1118 key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001119}
1120
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001121static int aria_setkey_enc_wrap(void *ctx,
1122 const unsigned char *key,
1123 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001124{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001125 return mbedtls_aria_setkey_enc((mbedtls_aria_context *)ctx, key,
1126 key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001127}
1128
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001129static void *aria_ctx_alloc(void)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001130{
1131 mbedtls_aria_context *ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001132 ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001133
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001134 if (ctx == NULL)
1135 return NULL;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001136
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001137 mbedtls_aria_init(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001138
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001139 return ctx;
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001140}
1141
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001142static void aria_ctx_free(void *ctx)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001143{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001144 mbedtls_aria_free((mbedtls_aria_context *)ctx);
1145 mbedtls_free(ctx);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001146}
1147
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001148static const mbedtls_cipher_base_t aria_info = { MBEDTLS_CIPHER_ID_ARIA,
1149 aria_crypt_ecb_wrap,
1150# if defined(MBEDTLS_CIPHER_MODE_CBC)
1151 aria_crypt_cbc_wrap,
1152# endif
1153# if defined(MBEDTLS_CIPHER_MODE_CFB)
1154 aria_crypt_cfb128_wrap,
1155# endif
1156# if defined(MBEDTLS_CIPHER_MODE_OFB)
1157 NULL,
1158# endif
1159# if defined(MBEDTLS_CIPHER_MODE_CTR)
1160 aria_crypt_ctr_wrap,
1161# endif
1162# if defined(MBEDTLS_CIPHER_MODE_XTS)
1163 NULL,
1164# endif
1165# if defined(MBEDTLS_CIPHER_MODE_STREAM)
1166 NULL,
1167# endif
1168 aria_setkey_enc_wrap,
1169 aria_setkey_dec_wrap,
1170 aria_ctx_alloc,
1171 aria_ctx_free };
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001172
1173static const mbedtls_cipher_info_t aria_128_ecb_info = {
1174 MBEDTLS_CIPHER_ARIA_128_ECB,
1175 MBEDTLS_MODE_ECB,
1176 128,
1177 "ARIA-128-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001178 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001179 0,
1180 16,
1181 &aria_info
1182};
1183
1184static const mbedtls_cipher_info_t aria_192_ecb_info = {
1185 MBEDTLS_CIPHER_ARIA_192_ECB,
1186 MBEDTLS_MODE_ECB,
1187 192,
1188 "ARIA-192-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001189 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001190 0,
1191 16,
1192 &aria_info
1193};
1194
1195static const mbedtls_cipher_info_t aria_256_ecb_info = {
1196 MBEDTLS_CIPHER_ARIA_256_ECB,
1197 MBEDTLS_MODE_ECB,
1198 256,
1199 "ARIA-256-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001200 0,
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001201 0,
1202 16,
1203 &aria_info
1204};
1205
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001206# if defined(MBEDTLS_CIPHER_MODE_CBC)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001207static const mbedtls_cipher_info_t aria_128_cbc_info = {
1208 MBEDTLS_CIPHER_ARIA_128_CBC,
1209 MBEDTLS_MODE_CBC,
1210 128,
1211 "ARIA-128-CBC",
1212 16,
1213 0,
1214 16,
1215 &aria_info
1216};
1217
1218static const mbedtls_cipher_info_t aria_192_cbc_info = {
1219 MBEDTLS_CIPHER_ARIA_192_CBC,
1220 MBEDTLS_MODE_CBC,
1221 192,
1222 "ARIA-192-CBC",
1223 16,
1224 0,
1225 16,
1226 &aria_info
1227};
1228
1229static const mbedtls_cipher_info_t aria_256_cbc_info = {
1230 MBEDTLS_CIPHER_ARIA_256_CBC,
1231 MBEDTLS_MODE_CBC,
1232 256,
1233 "ARIA-256-CBC",
1234 16,
1235 0,
1236 16,
1237 &aria_info
1238};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001239# endif /* MBEDTLS_CIPHER_MODE_CBC */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001240
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001241# if defined(MBEDTLS_CIPHER_MODE_CFB)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001242static const mbedtls_cipher_info_t aria_128_cfb128_info = {
1243 MBEDTLS_CIPHER_ARIA_128_CFB128,
1244 MBEDTLS_MODE_CFB,
1245 128,
1246 "ARIA-128-CFB128",
1247 16,
1248 0,
1249 16,
1250 &aria_info
1251};
1252
1253static const mbedtls_cipher_info_t aria_192_cfb128_info = {
1254 MBEDTLS_CIPHER_ARIA_192_CFB128,
1255 MBEDTLS_MODE_CFB,
1256 192,
1257 "ARIA-192-CFB128",
1258 16,
1259 0,
1260 16,
1261 &aria_info
1262};
1263
1264static const mbedtls_cipher_info_t aria_256_cfb128_info = {
1265 MBEDTLS_CIPHER_ARIA_256_CFB128,
1266 MBEDTLS_MODE_CFB,
1267 256,
1268 "ARIA-256-CFB128",
1269 16,
1270 0,
1271 16,
1272 &aria_info
1273};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001274# endif /* MBEDTLS_CIPHER_MODE_CFB */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001275
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001276# if defined(MBEDTLS_CIPHER_MODE_CTR)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001277static const mbedtls_cipher_info_t aria_128_ctr_info = {
1278 MBEDTLS_CIPHER_ARIA_128_CTR,
1279 MBEDTLS_MODE_CTR,
1280 128,
1281 "ARIA-128-CTR",
1282 16,
1283 0,
1284 16,
1285 &aria_info
1286};
1287
1288static const mbedtls_cipher_info_t aria_192_ctr_info = {
1289 MBEDTLS_CIPHER_ARIA_192_CTR,
1290 MBEDTLS_MODE_CTR,
1291 192,
1292 "ARIA-192-CTR",
1293 16,
1294 0,
1295 16,
1296 &aria_info
1297};
1298
1299static const mbedtls_cipher_info_t aria_256_ctr_info = {
1300 MBEDTLS_CIPHER_ARIA_256_CTR,
1301 MBEDTLS_MODE_CTR,
1302 256,
1303 "ARIA-256-CTR",
1304 16,
1305 0,
1306 16,
1307 &aria_info
1308};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001309# endif /* MBEDTLS_CIPHER_MODE_CTR */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001310
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001311# if defined(MBEDTLS_GCM_C)
1312static int gcm_aria_setkey_wrap(void *ctx,
1313 const unsigned char *key,
1314 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001315{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001316 return mbedtls_gcm_setkey((mbedtls_gcm_context *)ctx,
1317 MBEDTLS_CIPHER_ID_ARIA, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001318}
1319
1320static const mbedtls_cipher_base_t gcm_aria_info = {
1321 MBEDTLS_CIPHER_ID_ARIA,
1322 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001323# if defined(MBEDTLS_CIPHER_MODE_CBC)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001324 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001325# endif
1326# if defined(MBEDTLS_CIPHER_MODE_CFB)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001327 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001328# endif
1329# if defined(MBEDTLS_CIPHER_MODE_OFB)
Simon Butcher4844bf22018-06-11 15:21:05 +01001330 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001331# endif
1332# if defined(MBEDTLS_CIPHER_MODE_CTR)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001333 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001334# endif
1335# if defined(MBEDTLS_CIPHER_MODE_XTS)
Jaeden Ameroc6539902018-04-30 17:17:41 +01001336 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001337# endif
1338# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001339 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001340# endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001341 gcm_aria_setkey_wrap,
1342 gcm_aria_setkey_wrap,
1343 gcm_ctx_alloc,
1344 gcm_ctx_free,
1345};
1346
1347static const mbedtls_cipher_info_t aria_128_gcm_info = {
1348 MBEDTLS_CIPHER_ARIA_128_GCM,
1349 MBEDTLS_MODE_GCM,
1350 128,
1351 "ARIA-128-GCM",
1352 12,
1353 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1354 16,
1355 &gcm_aria_info
1356};
1357
1358static const mbedtls_cipher_info_t aria_192_gcm_info = {
1359 MBEDTLS_CIPHER_ARIA_192_GCM,
1360 MBEDTLS_MODE_GCM,
1361 192,
1362 "ARIA-192-GCM",
1363 12,
1364 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1365 16,
1366 &gcm_aria_info
1367};
1368
1369static const mbedtls_cipher_info_t aria_256_gcm_info = {
1370 MBEDTLS_CIPHER_ARIA_256_GCM,
1371 MBEDTLS_MODE_GCM,
1372 256,
1373 "ARIA-256-GCM",
1374 12,
1375 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1376 16,
1377 &gcm_aria_info
1378};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001379# endif /* MBEDTLS_GCM_C */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001380
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001381# if defined(MBEDTLS_CCM_C)
1382static int ccm_aria_setkey_wrap(void *ctx,
1383 const unsigned char *key,
1384 unsigned int key_bitlen)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001385{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001386 return mbedtls_ccm_setkey((mbedtls_ccm_context *)ctx,
1387 MBEDTLS_CIPHER_ID_ARIA, key, key_bitlen);
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001388}
1389
1390static const mbedtls_cipher_base_t ccm_aria_info = {
1391 MBEDTLS_CIPHER_ID_ARIA,
1392 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001393# if defined(MBEDTLS_CIPHER_MODE_CBC)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001394 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001395# endif
1396# if defined(MBEDTLS_CIPHER_MODE_CFB)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001397 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001398# endif
1399# if defined(MBEDTLS_CIPHER_MODE_OFB)
Simon Butcher7487c5b2018-04-29 00:24:51 +01001400 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001401# endif
1402# if defined(MBEDTLS_CIPHER_MODE_CTR)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001403 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001404# endif
1405# if defined(MBEDTLS_CIPHER_MODE_XTS)
Jaeden Ameroc6539902018-04-30 17:17:41 +01001406 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001407# endif
1408# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001409 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001410# endif
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001411 ccm_aria_setkey_wrap,
1412 ccm_aria_setkey_wrap,
1413 ccm_ctx_alloc,
1414 ccm_ctx_free,
1415};
1416
1417static const mbedtls_cipher_info_t aria_128_ccm_info = {
1418 MBEDTLS_CIPHER_ARIA_128_CCM,
1419 MBEDTLS_MODE_CCM,
1420 128,
1421 "ARIA-128-CCM",
1422 12,
1423 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1424 16,
1425 &ccm_aria_info
1426};
1427
1428static const mbedtls_cipher_info_t aria_192_ccm_info = {
1429 MBEDTLS_CIPHER_ARIA_192_CCM,
1430 MBEDTLS_MODE_CCM,
1431 192,
1432 "ARIA-192-CCM",
1433 12,
1434 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1435 16,
1436 &ccm_aria_info
1437};
1438
1439static const mbedtls_cipher_info_t aria_256_ccm_info = {
1440 MBEDTLS_CIPHER_ARIA_256_CCM,
1441 MBEDTLS_MODE_CCM,
1442 256,
1443 "ARIA-256-CCM",
1444 12,
1445 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
1446 16,
1447 &ccm_aria_info
1448};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001449# endif /* MBEDTLS_CCM_C */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001450
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001451# endif /* MBEDTLS_ARIA_C */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00001452
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001453# if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001454
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001455static int des_crypt_ecb_wrap(void *ctx,
1456 mbedtls_operation_t operation,
1457 const unsigned char *input,
1458 unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001459{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001460 ((void)operation);
1461 return mbedtls_des_crypt_ecb((mbedtls_des_context *)ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001462}
1463
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001464static int des3_crypt_ecb_wrap(void *ctx,
1465 mbedtls_operation_t operation,
1466 const unsigned char *input,
1467 unsigned char *output)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001468{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001469 ((void)operation);
1470 return mbedtls_des3_crypt_ecb((mbedtls_des3_context *)ctx, input, output);
Paul Bakker5e0efa72013-09-08 23:04:04 +02001471}
1472
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001473# if defined(MBEDTLS_CIPHER_MODE_CBC)
1474static int des_crypt_cbc_wrap(void *ctx,
1475 mbedtls_operation_t operation,
1476 size_t length,
1477 unsigned char *iv,
1478 const unsigned char *input,
1479 unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001480{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001481 return mbedtls_des_crypt_cbc((mbedtls_des_context *)ctx, operation, length,
1482 iv, input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001483}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001484# endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001485
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001486# if defined(MBEDTLS_CIPHER_MODE_CBC)
1487static int des3_crypt_cbc_wrap(void *ctx,
1488 mbedtls_operation_t operation,
1489 size_t length,
1490 unsigned char *iv,
1491 const unsigned char *input,
1492 unsigned char *output)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001493{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001494 return mbedtls_des3_crypt_cbc((mbedtls_des3_context *)ctx, operation,
1495 length, iv, input, output);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001496}
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001497# endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001498
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001499static int des_setkey_dec_wrap(void *ctx,
1500 const unsigned char *key,
1501 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001502{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001503 ((void)key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001504
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001505 return mbedtls_des_setkey_dec((mbedtls_des_context *)ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001506}
1507
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001508static int des_setkey_enc_wrap(void *ctx,
1509 const unsigned char *key,
1510 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001511{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001512 ((void)key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001513
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001514 return mbedtls_des_setkey_enc((mbedtls_des_context *)ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001515}
1516
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001517static int des3_set2key_dec_wrap(void *ctx,
1518 const unsigned char *key,
1519 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001520{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001521 ((void)key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001522
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001523 return mbedtls_des3_set2key_dec((mbedtls_des3_context *)ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001524}
1525
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001526static int des3_set2key_enc_wrap(void *ctx,
1527 const unsigned char *key,
1528 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001529{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001530 ((void)key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001531
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001532 return mbedtls_des3_set2key_enc((mbedtls_des3_context *)ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001533}
1534
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001535static int des3_set3key_dec_wrap(void *ctx,
1536 const unsigned char *key,
1537 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001538{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001539 ((void)key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001540
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001541 return mbedtls_des3_set3key_dec((mbedtls_des3_context *)ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001542}
1543
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001544static int des3_set3key_enc_wrap(void *ctx,
1545 const unsigned char *key,
1546 unsigned int key_bitlen)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001547{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001548 ((void)key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +00001549
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001550 return mbedtls_des3_set3key_enc((mbedtls_des3_context *)ctx, key);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001551}
1552
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001553static void *des_ctx_alloc(void)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001554{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001555 mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
Paul Bakker8123e9d2011-01-06 15:37:30 +00001556
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001557 if (des == NULL)
1558 return NULL;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001559
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001560 mbedtls_des_init(des);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001561
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001562 return des;
Paul Bakker8123e9d2011-01-06 15:37:30 +00001563}
1564
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001565static void des_ctx_free(void *ctx)
Paul Bakker8123e9d2011-01-06 15:37:30 +00001566{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001567 mbedtls_des_free((mbedtls_des_context *)ctx);
1568 mbedtls_free(ctx);
Paul Bakker34617722014-06-13 17:20:13 +02001569}
1570
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001571static void *des3_ctx_alloc(void)
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001572{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001573 mbedtls_des3_context *des3;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001574 des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001575
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001576 if (des3 == NULL)
1577 return NULL;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001578
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001579 mbedtls_des3_init(des3);
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001580
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001581 return des3;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001582}
1583
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001584static void des3_ctx_free(void *ctx)
Paul Bakker34617722014-06-13 17:20:13 +02001585{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001586 mbedtls_des3_free((mbedtls_des3_context *)ctx);
1587 mbedtls_free(ctx);
Paul Bakker8123e9d2011-01-06 15:37:30 +00001588}
1589
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001590static const mbedtls_cipher_base_t des_info = { MBEDTLS_CIPHER_ID_DES,
1591 des_crypt_ecb_wrap,
1592# if defined(MBEDTLS_CIPHER_MODE_CBC)
1593 des_crypt_cbc_wrap,
1594# endif
1595# if defined(MBEDTLS_CIPHER_MODE_CFB)
1596 NULL,
1597# endif
1598# if defined(MBEDTLS_CIPHER_MODE_OFB)
1599 NULL,
1600# endif
1601# if defined(MBEDTLS_CIPHER_MODE_CTR)
1602 NULL,
1603# endif
1604# if defined(MBEDTLS_CIPHER_MODE_XTS)
1605 NULL,
1606# endif
1607# if defined(MBEDTLS_CIPHER_MODE_STREAM)
1608 NULL,
1609# endif
1610 des_setkey_enc_wrap,
1611 des_setkey_dec_wrap,
1612 des_ctx_alloc,
1613 des_ctx_free };
Paul Bakker8123e9d2011-01-06 15:37:30 +00001614
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001615static const mbedtls_cipher_info_t des_ecb_info = { MBEDTLS_CIPHER_DES_ECB,
1616 MBEDTLS_MODE_ECB,
1617 MBEDTLS_KEY_LENGTH_DES,
1618 "DES-ECB",
1619 0,
1620 0,
1621 8,
1622 &des_info };
Paul Bakker5e0efa72013-09-08 23:04:04 +02001623
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001624# if defined(MBEDTLS_CIPHER_MODE_CBC)
1625static const mbedtls_cipher_info_t des_cbc_info = { MBEDTLS_CIPHER_DES_CBC,
1626 MBEDTLS_MODE_CBC,
1627 MBEDTLS_KEY_LENGTH_DES,
1628 "DES-CBC",
1629 8,
1630 0,
1631 8,
1632 &des_info };
1633# endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001634
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001635static const mbedtls_cipher_base_t des_ede_info = { MBEDTLS_CIPHER_ID_DES,
1636 des3_crypt_ecb_wrap,
1637# if defined(MBEDTLS_CIPHER_MODE_CBC)
1638 des3_crypt_cbc_wrap,
1639# endif
1640# if defined(MBEDTLS_CIPHER_MODE_CFB)
1641 NULL,
1642# endif
1643# if defined(MBEDTLS_CIPHER_MODE_OFB)
1644 NULL,
1645# endif
1646# if defined(MBEDTLS_CIPHER_MODE_CTR)
1647 NULL,
1648# endif
1649# if defined(MBEDTLS_CIPHER_MODE_XTS)
1650 NULL,
1651# endif
1652# if defined(MBEDTLS_CIPHER_MODE_STREAM)
1653 NULL,
1654# endif
1655 des3_set2key_enc_wrap,
1656 des3_set2key_dec_wrap,
1657 des3_ctx_alloc,
1658 des3_ctx_free };
Paul Bakker8123e9d2011-01-06 15:37:30 +00001659
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001660static const mbedtls_cipher_info_t des_ede_ecb_info = {
1661 MBEDTLS_CIPHER_DES_EDE_ECB,
1662 MBEDTLS_MODE_ECB,
1663 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001664 "DES-EDE-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001665 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001666 0,
1667 8,
1668 &des_ede_info
1669};
1670
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001671# if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001672static const mbedtls_cipher_info_t des_ede_cbc_info = {
1673 MBEDTLS_CIPHER_DES_EDE_CBC,
1674 MBEDTLS_MODE_CBC,
1675 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker343a8702011-06-09 14:27:58 +00001676 "DES-EDE-CBC",
Paul Bakker0e342352013-06-24 19:33:02 +02001677 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001678 0,
Paul Bakker0e342352013-06-24 19:33:02 +02001679 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001680 &des_ede_info
1681};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001682# endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001683
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001684static const mbedtls_cipher_base_t des_ede3_info = { MBEDTLS_CIPHER_ID_3DES,
1685 des3_crypt_ecb_wrap,
1686# if defined(MBEDTLS_CIPHER_MODE_CBC)
1687 des3_crypt_cbc_wrap,
1688# endif
1689# if defined(MBEDTLS_CIPHER_MODE_CFB)
1690 NULL,
1691# endif
1692# if defined(MBEDTLS_CIPHER_MODE_OFB)
1693 NULL,
1694# endif
1695# if defined(MBEDTLS_CIPHER_MODE_CTR)
1696 NULL,
1697# endif
1698# if defined(MBEDTLS_CIPHER_MODE_XTS)
1699 NULL,
1700# endif
1701# if defined(MBEDTLS_CIPHER_MODE_STREAM)
1702 NULL,
1703# endif
1704 des3_set3key_enc_wrap,
1705 des3_set3key_dec_wrap,
1706 des3_ctx_alloc,
1707 des3_ctx_free };
Paul Bakker343a8702011-06-09 14:27:58 +00001708
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001709static const mbedtls_cipher_info_t des_ede3_ecb_info = {
1710 MBEDTLS_CIPHER_DES_EDE3_ECB,
1711 MBEDTLS_MODE_ECB,
1712 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001713 "DES-EDE3-ECB",
Bence Szépkútia8e40dd2020-10-29 10:22:35 +01001714 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001715 0,
1716 8,
1717 &des_ede3_info
1718};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001719# if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001720static const mbedtls_cipher_info_t des_ede3_cbc_info = {
1721 MBEDTLS_CIPHER_DES_EDE3_CBC,
1722 MBEDTLS_MODE_CBC,
1723 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker23986e52011-04-24 08:57:21 +00001724 "DES-EDE3-CBC",
1725 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001726 0,
Paul Bakker23986e52011-04-24 08:57:21 +00001727 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001728 &des_ede3_info
Paul Bakker8123e9d2011-01-06 15:37:30 +00001729};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001730# endif /* MBEDTLS_CIPHER_MODE_CBC */
1731# endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001732
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001733# if defined(MBEDTLS_CHACHA20_C)
Daniel Kingbd920622016-05-15 19:56:20 -03001734
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001735static int chacha20_setkey_wrap(void *ctx,
1736 const unsigned char *key,
1737 unsigned int key_bitlen)
Daniel Kingbd920622016-05-15 19:56:20 -03001738{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001739 if (key_bitlen != 256U)
1740 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
Daniel Kingbd920622016-05-15 19:56:20 -03001741
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001742 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *)ctx, key))
1743 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
Daniel Kingbd920622016-05-15 19:56:20 -03001744
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001745 return 0;
Daniel Kingbd920622016-05-15 19:56:20 -03001746}
1747
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001748static int chacha20_stream_wrap(void *ctx,
1749 size_t length,
1750 const unsigned char *input,
1751 unsigned char *output)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001752{
Janos Follath24eed8d2019-11-22 13:21:35 +00001753 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001754
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001755 ret = mbedtls_chacha20_update(ctx, length, input, output);
1756 if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA)
1757 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001758
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001759 return ret;
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001760}
1761
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001762static void *chacha20_ctx_alloc(void)
Daniel Kingbd920622016-05-15 19:56:20 -03001763{
1764 mbedtls_chacha20_context *ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001765 ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
Daniel Kingbd920622016-05-15 19:56:20 -03001766
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001767 if (ctx == NULL)
1768 return NULL;
Daniel Kingbd920622016-05-15 19:56:20 -03001769
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001770 mbedtls_chacha20_init(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001771
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001772 return ctx;
Daniel Kingbd920622016-05-15 19:56:20 -03001773}
1774
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001775static void chacha20_ctx_free(void *ctx)
Daniel Kingbd920622016-05-15 19:56:20 -03001776{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001777 mbedtls_chacha20_free((mbedtls_chacha20_context *)ctx);
1778 mbedtls_free(ctx);
Daniel Kingbd920622016-05-15 19:56:20 -03001779}
1780
1781static const mbedtls_cipher_base_t chacha20_base_info = {
1782 MBEDTLS_CIPHER_ID_CHACHA20,
1783 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001784# if defined(MBEDTLS_CIPHER_MODE_CBC)
Daniel Kingbd920622016-05-15 19:56:20 -03001785 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001786# endif
1787# if defined(MBEDTLS_CIPHER_MODE_CFB)
Daniel Kingbd920622016-05-15 19:56:20 -03001788 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001789# endif
1790# if defined(MBEDTLS_CIPHER_MODE_OFB)
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001791 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001792# endif
1793# if defined(MBEDTLS_CIPHER_MODE_CTR)
Daniel Kingbd920622016-05-15 19:56:20 -03001794 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001795# endif
1796# if defined(MBEDTLS_CIPHER_MODE_XTS)
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001797 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001798# endif
1799# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001800 chacha20_stream_wrap,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001801# endif
Daniel Kingbd920622016-05-15 19:56:20 -03001802 chacha20_setkey_wrap,
1803 chacha20_setkey_wrap,
1804 chacha20_ctx_alloc,
1805 chacha20_ctx_free
1806};
1807static const mbedtls_cipher_info_t chacha20_info = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001808 MBEDTLS_CIPHER_CHACHA20, MBEDTLS_MODE_STREAM, 256, "CHACHA20", 12, 0, 1,
Daniel Kingbd920622016-05-15 19:56:20 -03001809 &chacha20_base_info
1810};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001811# endif /* MBEDTLS_CHACHA20_C */
Daniel Kingbd920622016-05-15 19:56:20 -03001812
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001813# if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001814
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001815static int chachapoly_setkey_wrap(void *ctx,
1816 const unsigned char *key,
1817 unsigned int key_bitlen)
Daniel King8fe47012016-05-17 20:33:28 -03001818{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001819 if (key_bitlen != 256U)
1820 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
Daniel King8fe47012016-05-17 20:33:28 -03001821
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001822 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *)ctx, key))
1823 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
Daniel King8fe47012016-05-17 20:33:28 -03001824
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001825 return 0;
Daniel King8fe47012016-05-17 20:33:28 -03001826}
1827
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001828static void *chachapoly_ctx_alloc(void)
Daniel King8fe47012016-05-17 20:33:28 -03001829{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001830 mbedtls_chachapoly_context *ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001831 ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
Daniel King8fe47012016-05-17 20:33:28 -03001832
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001833 if (ctx == NULL)
1834 return NULL;
Daniel King8fe47012016-05-17 20:33:28 -03001835
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001836 mbedtls_chachapoly_init(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001837
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001838 return ctx;
Daniel King8fe47012016-05-17 20:33:28 -03001839}
1840
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001841static void chachapoly_ctx_free(void *ctx)
Daniel King8fe47012016-05-17 20:33:28 -03001842{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001843 mbedtls_chachapoly_free((mbedtls_chachapoly_context *)ctx);
1844 mbedtls_free(ctx);
Daniel King8fe47012016-05-17 20:33:28 -03001845}
1846
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001847static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001848 MBEDTLS_CIPHER_ID_CHACHA20,
1849 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001850# if defined(MBEDTLS_CIPHER_MODE_CBC)
Daniel King8fe47012016-05-17 20:33:28 -03001851 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001852# endif
1853# if defined(MBEDTLS_CIPHER_MODE_CFB)
Daniel King8fe47012016-05-17 20:33:28 -03001854 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001855# endif
1856# if defined(MBEDTLS_CIPHER_MODE_OFB)
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001857 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001858# endif
1859# if defined(MBEDTLS_CIPHER_MODE_CTR)
Daniel King8fe47012016-05-17 20:33:28 -03001860 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001861# endif
1862# if defined(MBEDTLS_CIPHER_MODE_XTS)
Manuel Pégourié-Gonnarda18034a2018-06-19 11:30:32 +02001863 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001864# endif
1865# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Daniel King8fe47012016-05-17 20:33:28 -03001866 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001867# endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001868 chachapoly_setkey_wrap,
1869 chachapoly_setkey_wrap,
1870 chachapoly_ctx_alloc,
1871 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001872};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001873static const mbedtls_cipher_info_t chachapoly_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001874 MBEDTLS_CIPHER_CHACHA20_POLY1305,
Manuel Pégourié-Gonnardf57bf8b2018-06-18 11:14:09 +02001875 MBEDTLS_MODE_CHACHAPOLY,
Daniel King8fe47012016-05-17 20:33:28 -03001876 256,
1877 "CHACHA20-POLY1305",
1878 12,
1879 0,
Manuel Pégourié-Gonnard32902e62018-05-10 12:30:19 +02001880 1,
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001881 &chachapoly_base_info
Daniel King8fe47012016-05-17 20:33:28 -03001882};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001883# endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03001884
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001885# if defined(MBEDTLS_CIPHER_NULL_CIPHER)
1886static int null_crypt_stream(void *ctx,
1887 size_t length,
1888 const unsigned char *input,
1889 unsigned char *output)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001890{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001891 ((void)ctx);
1892 memmove(output, input, length);
1893 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001894}
1895
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001896static int
1897null_setkey(void *ctx, const unsigned char *key, unsigned int key_bitlen)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001898{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001899 ((void)ctx);
1900 ((void)key);
1901 ((void)key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001902
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001903 return 0;
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001904}
1905
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001906static void *null_ctx_alloc(void)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001907{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001908 return (void *)1;
Paul Bakkerfab5c822012-02-06 16:45:10 +00001909}
1910
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001911static void null_ctx_free(void *ctx)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001912{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001913 ((void)ctx);
Paul Bakkerfab5c822012-02-06 16:45:10 +00001914}
1915
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001916static const mbedtls_cipher_base_t null_base_info = { MBEDTLS_CIPHER_ID_NULL,
1917 NULL,
1918# if defined(MBEDTLS_CIPHER_MODE_CBC)
1919 NULL,
1920# endif
1921# if defined(MBEDTLS_CIPHER_MODE_CFB)
1922 NULL,
1923# endif
1924# if defined(MBEDTLS_CIPHER_MODE_OFB)
1925 NULL,
1926# endif
1927# if defined(MBEDTLS_CIPHER_MODE_CTR)
1928 NULL,
1929# endif
1930# if defined(MBEDTLS_CIPHER_MODE_XTS)
1931 NULL,
1932# endif
1933# if defined(MBEDTLS_CIPHER_MODE_STREAM)
1934 null_crypt_stream,
1935# endif
1936 null_setkey,
1937 null_setkey,
1938 null_ctx_alloc,
1939 null_ctx_free };
Paul Bakkerfab5c822012-02-06 16:45:10 +00001940
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001941static const mbedtls_cipher_info_t null_cipher_info = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001942 MBEDTLS_CIPHER_NULL, MBEDTLS_MODE_STREAM, 0, "NULL", 0, 0, 1,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001943 &null_base_info
1944};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001945# endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00001946
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001947# if defined(MBEDTLS_NIST_KW_C)
1948static void *kw_ctx_alloc(void)
Jack Lloydffdf2882019-03-07 17:00:32 -05001949{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001950 void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
Jack Lloydffdf2882019-03-07 17:00:32 -05001951
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001952 if (ctx != NULL)
1953 mbedtls_nist_kw_init((mbedtls_nist_kw_context *)ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05001954
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001955 return ctx;
Jack Lloydffdf2882019-03-07 17:00:32 -05001956}
1957
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001958static void kw_ctx_free(void *ctx)
Jack Lloydffdf2882019-03-07 17:00:32 -05001959{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001960 mbedtls_nist_kw_free(ctx);
1961 mbedtls_free(ctx);
Jack Lloydffdf2882019-03-07 17:00:32 -05001962}
1963
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001964static int
1965kw_aes_setkey_wrap(void *ctx, const unsigned char *key, unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05001966{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001967 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *)ctx,
1968 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
Jack Lloydffdf2882019-03-07 17:00:32 -05001969}
1970
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001971static int kw_aes_setkey_unwrap(void *ctx,
1972 const unsigned char *key,
1973 unsigned int key_bitlen)
Jack Lloydffdf2882019-03-07 17:00:32 -05001974{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001975 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *)ctx,
1976 MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
Jack Lloydffdf2882019-03-07 17:00:32 -05001977}
1978
1979static const mbedtls_cipher_base_t kw_aes_info = {
1980 MBEDTLS_CIPHER_ID_AES,
1981 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001982# if defined(MBEDTLS_CIPHER_MODE_CBC)
Jack Lloydffdf2882019-03-07 17:00:32 -05001983 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001984# endif
1985# if defined(MBEDTLS_CIPHER_MODE_CFB)
Jack Lloydffdf2882019-03-07 17:00:32 -05001986 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001987# endif
1988# if defined(MBEDTLS_CIPHER_MODE_OFB)
Jack Lloydffdf2882019-03-07 17:00:32 -05001989 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001990# endif
1991# if defined(MBEDTLS_CIPHER_MODE_CTR)
Jack Lloydffdf2882019-03-07 17:00:32 -05001992 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001993# endif
1994# if defined(MBEDTLS_CIPHER_MODE_XTS)
Jack Lloydffdf2882019-03-07 17:00:32 -05001995 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001996# endif
1997# if defined(MBEDTLS_CIPHER_MODE_STREAM)
Jack Lloydffdf2882019-03-07 17:00:32 -05001998 NULL,
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02001999# endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002000 kw_aes_setkey_wrap,
2001 kw_aes_setkey_unwrap,
2002 kw_ctx_alloc,
2003 kw_ctx_free,
2004};
2005
2006static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
2007 MBEDTLS_CIPHER_AES_128_KW,
2008 MBEDTLS_MODE_KW,
2009 128,
2010 "AES-128-KW",
2011 0,
2012 0,
2013 16,
2014 &kw_aes_info
2015};
2016
2017static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
2018 MBEDTLS_CIPHER_AES_192_KW,
2019 MBEDTLS_MODE_KW,
2020 192,
2021 "AES-192-KW",
2022 0,
2023 0,
2024 16,
2025 &kw_aes_info
2026};
2027
2028static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
2029 MBEDTLS_CIPHER_AES_256_KW,
2030 MBEDTLS_MODE_KW,
2031 256,
2032 "AES-256-KW",
2033 0,
2034 0,
2035 16,
2036 &kw_aes_info
2037};
2038
2039static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
2040 MBEDTLS_CIPHER_AES_128_KWP,
2041 MBEDTLS_MODE_KWP,
2042 128,
2043 "AES-128-KWP",
2044 0,
2045 0,
2046 16,
2047 &kw_aes_info
2048};
2049
2050static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
2051 MBEDTLS_CIPHER_AES_192_KWP,
2052 MBEDTLS_MODE_KWP,
2053 192,
2054 "AES-192-KWP",
2055 0,
2056 0,
2057 16,
2058 &kw_aes_info
2059};
2060
2061static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
2062 MBEDTLS_CIPHER_AES_256_KWP,
2063 MBEDTLS_MODE_KWP,
2064 256,
2065 "AES-256-KWP",
2066 0,
2067 0,
2068 16,
2069 &kw_aes_info
2070};
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002071# endif /* MBEDTLS_NIST_KW_C */
Jack Lloydffdf2882019-03-07 17:00:32 -05002072
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002073const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = {
2074# if defined(MBEDTLS_AES_C)
2075 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
2076 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
2077 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
2078# if defined(MBEDTLS_CIPHER_MODE_CBC)
2079 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
2080 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
2081 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
2082# endif
2083# if defined(MBEDTLS_CIPHER_MODE_CFB)
2084 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
2085 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
2086 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
2087# endif
2088# if defined(MBEDTLS_CIPHER_MODE_OFB)
2089 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
2090 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
2091 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
2092# endif
2093# if defined(MBEDTLS_CIPHER_MODE_CTR)
2094 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
2095 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
2096 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
2097# endif
2098# if defined(MBEDTLS_CIPHER_MODE_XTS)
2099 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
2100 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
2101# endif
2102# if defined(MBEDTLS_GCM_C)
2103 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
2104 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
2105 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
2106# endif
2107# if defined(MBEDTLS_CCM_C)
2108 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
2109 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
2110 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
2111# endif
2112# endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002113
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002114# if defined(MBEDTLS_CAMELLIA_C)
2115 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
2116 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
2117 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
2118# if defined(MBEDTLS_CIPHER_MODE_CBC)
2119 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
2120 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
2121 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
2122# endif
2123# if defined(MBEDTLS_CIPHER_MODE_CFB)
2124 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
2125 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
2126 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
2127# endif
2128# if defined(MBEDTLS_CIPHER_MODE_CTR)
2129 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
2130 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
2131 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
2132# endif
2133# if defined(MBEDTLS_GCM_C)
2134 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
2135 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
2136 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
2137# endif
2138# if defined(MBEDTLS_CCM_C)
2139 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
2140 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
2141 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
2142# endif
2143# endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002144
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002145# if defined(MBEDTLS_ARIA_C)
2146 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
2147 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
2148 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
2149# if defined(MBEDTLS_CIPHER_MODE_CBC)
2150 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
2151 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
2152 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
2153# endif
2154# if defined(MBEDTLS_CIPHER_MODE_CFB)
2155 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
2156 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
2157 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
2158# endif
2159# if defined(MBEDTLS_CIPHER_MODE_CTR)
2160 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
2161 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
2162 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
2163# endif
2164# if defined(MBEDTLS_GCM_C)
2165 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
2166 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
2167 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
2168# endif
2169# if defined(MBEDTLS_CCM_C)
2170 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
2171 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
2172 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
2173# endif
2174# endif /* MBEDTLS_ARIA_C */
Markku-Juhani O. Saarinenc06e1012017-12-07 11:51:13 +00002175
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002176# if defined(MBEDTLS_DES_C)
2177 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
2178 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
2179 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
2180# if defined(MBEDTLS_CIPHER_MODE_CBC)
2181 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
2182 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
2183 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
2184# endif
2185# endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002186
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002187# if defined(MBEDTLS_CHACHA20_C)
2188 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
2189# endif
Daniel Kingbd920622016-05-15 19:56:20 -03002190
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002191# if defined(MBEDTLS_CHACHAPOLY_C)
2192 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
2193# endif
Daniel King8fe47012016-05-17 20:33:28 -03002194
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002195# if defined(MBEDTLS_NIST_KW_C)
2196 { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
2197 { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
2198 { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
2199 { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
2200 { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
2201 { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
2202# endif
Jack Lloydffdf2882019-03-07 17:00:32 -05002203
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002204# if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2205 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
2206# endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002207
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002208 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002209};
2210
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02002211# define NUM_CIPHERS \
2212 (sizeof(mbedtls_cipher_definitions) / \
2213 sizeof(mbedtls_cipher_definitions[0]))
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002214int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02002215
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002216#endif /* MBEDTLS_CIPHER_C */