blob: 901a2ca6da190d5f53739f81c210e9a15031387c [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 *
Manuel Pégourié-Gonnard6fb81872015-07-27 11:11:48 +02008 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
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 *
Manuel Pégourié-Gonnardfe446432015-03-06 13:17:10 +000023 * This file is part of mbed TLS (https://tls.mbed.org)
Paul Bakker8123e9d2011-01-06 15:37:30 +000024 */
25
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020026#if !defined(MBEDTLS_CONFIG_FILE)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000027#include "mbedtls/config.h"
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020028#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020029#include MBEDTLS_CONFIG_FILE
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020030#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000031
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020032#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000033
Manuel Pégourié-Gonnard50518f42015-05-26 11:04:15 +020034#include "mbedtls/cipher_internal.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000035
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020036#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000037#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000038#endif
39
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020040#if defined(MBEDTLS_ARC4_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000041#include "mbedtls/arc4.h"
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +020042#endif
43
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020044#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000045#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000046#endif
47
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020048#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000049#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000050#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000051
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020052#if defined(MBEDTLS_BLOWFISH_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000053#include "mbedtls/blowfish.h"
Paul Bakker6132d0a2012-07-04 17:10:40 +000054#endif
55
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020056#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000057#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020058#endif
59
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020060#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000061#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020062#endif
63
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020064#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000065#include <string.h>
66#endif
67
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020068#if defined(MBEDTLS_PLATFORM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000069#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020070#else
Rich Evans00ab4702015-02-06 13:43:58 +000071#include <stdlib.h>
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +020072#define mbedtls_calloc calloc
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020073#define mbedtls_free free
Paul Bakker6e339b52013-07-03 13:37:05 +020074#endif
75
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020076#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020077/* shared by all GCM ciphers */
78static void *gcm_ctx_alloc( void )
79{
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020080 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) );
81
82 if( ctx != NULL )
83 mbedtls_gcm_init( (mbedtls_gcm_context *) ctx );
84
85 return( ctx );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020086}
87
88static void gcm_ctx_free( void *ctx )
89{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020090 mbedtls_gcm_free( ctx );
91 mbedtls_free( ctx );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020092}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020093#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020094
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020095#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020096/* shared by all CCM ciphers */
97static void *ccm_ctx_alloc( void )
98{
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020099 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) );
100
101 if( ctx != NULL )
102 mbedtls_ccm_init( (mbedtls_ccm_context *) ctx );
103
104 return( ctx );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200105}
106
107static void ccm_ctx_free( void *ctx )
108{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200109 mbedtls_ccm_free( ctx );
110 mbedtls_free( ctx );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200111}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200112#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200113
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200114#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000115
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200116static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200117 const unsigned char *input, unsigned char *output )
118{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200119 return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200120}
121
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200122#if defined(MBEDTLS_CIPHER_MODE_CBC)
123static int aes_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000124 unsigned char *iv, const unsigned char *input, unsigned char *output )
125{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200126 return mbedtls_aes_crypt_cbc( (mbedtls_aes_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200127 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000128}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200129#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000130
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200131#if defined(MBEDTLS_CIPHER_MODE_CFB)
132static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200133 size_t length, size_t *iv_off, unsigned char *iv,
134 const unsigned char *input, unsigned char *output )
Paul Bakker343a8702011-06-09 14:27:58 +0000135{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200136 return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200137 input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000138}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200139#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000140
Simon Butcher91e254c2018-04-22 22:58:07 +0100141#if defined(MBEDTLS_CIPHER_MODE_OFB)
142static int aes_crypt_ofb_wrap( void *ctx, size_t length, size_t *iv_off,
143 unsigned char *iv, const unsigned char *input, unsigned char *output )
144{
145 return mbedtls_aes_crypt_ofb( (mbedtls_aes_context *) ctx, length, iv_off,
146 iv, input, output );
147}
148#endif /* MBEDTLS_CIPHER_MODE_OFB */
149
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200150#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200151static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
152 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker343a8702011-06-09 14:27:58 +0000153 const unsigned char *input, unsigned char *output )
154{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200155 return mbedtls_aes_crypt_ctr( (mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
Paul Bakker343a8702011-06-09 14:27:58 +0000156 stream_block, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000157}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200158#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000159
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200160static int aes_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200161 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000162{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200163 return mbedtls_aes_setkey_dec( (mbedtls_aes_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000164}
165
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200166static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200167 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000168{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200169 return mbedtls_aes_setkey_enc( (mbedtls_aes_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000170}
171
172static void * aes_ctx_alloc( void )
173{
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200174 mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200175
176 if( aes == NULL )
177 return( NULL );
178
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200179 mbedtls_aes_init( aes );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200180
181 return( aes );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000182}
183
184static void aes_ctx_free( void *ctx )
185{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200186 mbedtls_aes_free( (mbedtls_aes_context *) ctx );
187 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000188}
189
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200190static const mbedtls_cipher_base_t aes_info = {
191 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200192 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200193#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000194 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100195#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200196#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000197 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100198#endif
Simon Butcher91e254c2018-04-22 22:58:07 +0100199#if defined(MBEDTLS_CIPHER_MODE_OFB)
200 aes_crypt_ofb_wrap,
201#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200202#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000203 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100204#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200205#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200206 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100207#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000208 aes_setkey_enc_wrap,
209 aes_setkey_dec_wrap,
210 aes_ctx_alloc,
211 aes_ctx_free
212};
213
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200214static const mbedtls_cipher_info_t aes_128_ecb_info = {
215 MBEDTLS_CIPHER_AES_128_ECB,
216 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200217 128,
218 "AES-128-ECB",
219 16,
220 0,
221 16,
222 &aes_info
223};
224
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200225static const mbedtls_cipher_info_t aes_192_ecb_info = {
226 MBEDTLS_CIPHER_AES_192_ECB,
227 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200228 192,
229 "AES-192-ECB",
230 16,
231 0,
232 16,
233 &aes_info
234};
235
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200236static const mbedtls_cipher_info_t aes_256_ecb_info = {
237 MBEDTLS_CIPHER_AES_256_ECB,
238 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200239 256,
240 "AES-256-ECB",
241 16,
242 0,
243 16,
244 &aes_info
245};
246
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200247#if defined(MBEDTLS_CIPHER_MODE_CBC)
248static const mbedtls_cipher_info_t aes_128_cbc_info = {
249 MBEDTLS_CIPHER_AES_128_CBC,
250 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000251 128,
252 "AES-128-CBC",
253 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200254 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000255 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000256 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000257};
258
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200259static const mbedtls_cipher_info_t aes_192_cbc_info = {
260 MBEDTLS_CIPHER_AES_192_CBC,
261 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000262 192,
263 "AES-192-CBC",
264 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200265 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000266 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000267 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000268};
269
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200270static const mbedtls_cipher_info_t aes_256_cbc_info = {
271 MBEDTLS_CIPHER_AES_256_CBC,
272 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000273 256,
274 "AES-256-CBC",
275 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200276 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000277 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000278 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000279};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200280#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000281
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200282#if defined(MBEDTLS_CIPHER_MODE_CFB)
283static const mbedtls_cipher_info_t aes_128_cfb128_info = {
284 MBEDTLS_CIPHER_AES_128_CFB128,
285 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000286 128,
287 "AES-128-CFB128",
288 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200289 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000290 16,
291 &aes_info
292};
293
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200294static const mbedtls_cipher_info_t aes_192_cfb128_info = {
295 MBEDTLS_CIPHER_AES_192_CFB128,
296 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000297 192,
298 "AES-192-CFB128",
299 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200300 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000301 16,
302 &aes_info
303};
304
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200305static const mbedtls_cipher_info_t aes_256_cfb128_info = {
306 MBEDTLS_CIPHER_AES_256_CFB128,
307 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000308 256,
309 "AES-256-CFB128",
310 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200311 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000312 16,
313 &aes_info
314};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200315#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000316
Simon Butcher91e254c2018-04-22 22:58:07 +0100317#if defined(MBEDTLS_CIPHER_MODE_OFB)
318static const mbedtls_cipher_info_t aes_128_ofb_info = {
319 MBEDTLS_CIPHER_AES_128_OFB,
320 MBEDTLS_MODE_OFB,
321 128,
322 "AES-128-OFB",
323 16,
324 0,
325 16,
326 &aes_info
327};
328
329static const mbedtls_cipher_info_t aes_192_ofb_info = {
330 MBEDTLS_CIPHER_AES_192_OFB,
331 MBEDTLS_MODE_OFB,
332 192,
333 "AES-192-OFB",
334 16,
335 0,
336 16,
337 &aes_info
338};
339
340static const mbedtls_cipher_info_t aes_256_ofb_info = {
341 MBEDTLS_CIPHER_AES_256_OFB,
342 MBEDTLS_MODE_OFB,
343 256,
344 "AES-256-OFB",
345 16,
346 0,
347 16,
348 &aes_info
349};
350#endif /* MBEDTLS_CIPHER_MODE_OFB */
351
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200352#if defined(MBEDTLS_CIPHER_MODE_CTR)
353static const mbedtls_cipher_info_t aes_128_ctr_info = {
354 MBEDTLS_CIPHER_AES_128_CTR,
355 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000356 128,
357 "AES-128-CTR",
358 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200359 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000360 16,
361 &aes_info
362};
363
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200364static const mbedtls_cipher_info_t aes_192_ctr_info = {
365 MBEDTLS_CIPHER_AES_192_CTR,
366 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000367 192,
368 "AES-192-CTR",
369 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200370 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000371 16,
372 &aes_info
373};
374
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200375static const mbedtls_cipher_info_t aes_256_ctr_info = {
376 MBEDTLS_CIPHER_AES_256_CTR,
377 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000378 256,
379 "AES-256-CTR",
380 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200381 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000382 16,
383 &aes_info
384};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200385#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000386
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200387#if defined(MBEDTLS_GCM_C)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200388static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200389 unsigned int key_bitlen )
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200390{
Manuel Pégourié-Gonnardc34e8dd2015-04-28 21:42:17 +0200391 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200392 key, key_bitlen );
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200393}
394
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200395static const mbedtls_cipher_base_t gcm_aes_info = {
396 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200397 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200398#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200399 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100400#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200401#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200402 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100403#endif
Simon Butcher91e254c2018-04-22 22:58:07 +0100404#if defined(MBEDTLS_CIPHER_MODE_OFB)
405 NULL,
406#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200407#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200408 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100409#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200410#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200411 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100412#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200413 gcm_aes_setkey_wrap,
414 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200415 gcm_ctx_alloc,
416 gcm_ctx_free,
417};
418
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200419static const mbedtls_cipher_info_t aes_128_gcm_info = {
420 MBEDTLS_CIPHER_AES_128_GCM,
421 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100422 128,
423 "AES-128-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200424 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200425 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100426 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200427 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100428};
429
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200430static const mbedtls_cipher_info_t aes_192_gcm_info = {
431 MBEDTLS_CIPHER_AES_192_GCM,
432 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200433 192,
434 "AES-192-GCM",
435 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200436 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200437 16,
438 &gcm_aes_info
439};
440
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200441static const mbedtls_cipher_info_t aes_256_gcm_info = {
442 MBEDTLS_CIPHER_AES_256_GCM,
443 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100444 256,
445 "AES-256-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200446 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200447 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100448 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200449 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100450};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200451#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100452
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200453#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200454static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200455 unsigned int key_bitlen )
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200456{
Manuel Pégourié-Gonnard6963ff02015-04-28 18:02:54 +0200457 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200458 key, key_bitlen );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200459}
460
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200461static const mbedtls_cipher_base_t ccm_aes_info = {
462 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200463 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200464#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200465 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100466#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200467#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200468 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100469#endif
Simon Butcher91e254c2018-04-22 22:58:07 +0100470#if defined(MBEDTLS_CIPHER_MODE_OFB)
471 NULL,
472#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200473#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200474 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100475#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200476#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200477 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100478#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200479 ccm_aes_setkey_wrap,
480 ccm_aes_setkey_wrap,
481 ccm_ctx_alloc,
482 ccm_ctx_free,
483};
484
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200485static const mbedtls_cipher_info_t aes_128_ccm_info = {
486 MBEDTLS_CIPHER_AES_128_CCM,
487 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200488 128,
489 "AES-128-CCM",
490 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200491 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200492 16,
493 &ccm_aes_info
494};
495
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200496static const mbedtls_cipher_info_t aes_192_ccm_info = {
497 MBEDTLS_CIPHER_AES_192_CCM,
498 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200499 192,
500 "AES-192-CCM",
501 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200502 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200503 16,
504 &ccm_aes_info
505};
506
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200507static const mbedtls_cipher_info_t aes_256_ccm_info = {
508 MBEDTLS_CIPHER_AES_256_CCM,
509 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200510 256,
511 "AES-256-CCM",
512 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200513 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200514 16,
515 &ccm_aes_info
516};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200517#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200518
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200519#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000520
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200521#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000522
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200523static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200524 const unsigned char *input, unsigned char *output )
525{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200526 return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200527 output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200528}
529
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200530#if defined(MBEDTLS_CIPHER_MODE_CBC)
531static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200532 size_t length, unsigned char *iv,
533 const unsigned char *input, unsigned char *output )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000534{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200535 return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200536 input, output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000537}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200538#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000539
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200540#if defined(MBEDTLS_CIPHER_MODE_CFB)
541static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200542 size_t length, size_t *iv_off, unsigned char *iv,
543 const unsigned char *input, unsigned char *output )
Paul Bakker343a8702011-06-09 14:27:58 +0000544{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200545 return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200546 iv_off, iv, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000547}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200548#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000549
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200550#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200551static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
552 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker343a8702011-06-09 14:27:58 +0000553 const unsigned char *input, unsigned char *output )
554{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200555 return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200556 nonce_counter, stream_block, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000557}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200558#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000559
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200560static int camellia_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200561 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000562{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200563 return mbedtls_camellia_setkey_dec( (mbedtls_camellia_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000564}
565
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200566static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200567 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000568{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200569 return mbedtls_camellia_setkey_enc( (mbedtls_camellia_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000570}
571
572static void * camellia_ctx_alloc( void )
573{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200574 mbedtls_camellia_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200575 ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200576
577 if( ctx == NULL )
578 return( NULL );
579
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200580 mbedtls_camellia_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200581
582 return( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000583}
584
585static void camellia_ctx_free( void *ctx )
586{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200587 mbedtls_camellia_free( (mbedtls_camellia_context *) ctx );
588 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000589}
590
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200591static const mbedtls_cipher_base_t camellia_info = {
592 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200593 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200594#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000595 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100596#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200597#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000598 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100599#endif
Simon Butcher91e254c2018-04-22 22:58:07 +0100600#if defined(MBEDTLS_CIPHER_MODE_OFB)
601 NULL,
602#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200603#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000604 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100605#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200606#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200607 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100608#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000609 camellia_setkey_enc_wrap,
610 camellia_setkey_dec_wrap,
611 camellia_ctx_alloc,
612 camellia_ctx_free
613};
614
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200615static const mbedtls_cipher_info_t camellia_128_ecb_info = {
616 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
617 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200618 128,
619 "CAMELLIA-128-ECB",
620 16,
621 0,
622 16,
623 &camellia_info
624};
625
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200626static const mbedtls_cipher_info_t camellia_192_ecb_info = {
627 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
628 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200629 192,
630 "CAMELLIA-192-ECB",
631 16,
632 0,
633 16,
634 &camellia_info
635};
636
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200637static const mbedtls_cipher_info_t camellia_256_ecb_info = {
638 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
639 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200640 256,
641 "CAMELLIA-256-ECB",
642 16,
643 0,
644 16,
645 &camellia_info
646};
647
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200648#if defined(MBEDTLS_CIPHER_MODE_CBC)
649static const mbedtls_cipher_info_t camellia_128_cbc_info = {
650 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
651 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000652 128,
653 "CAMELLIA-128-CBC",
654 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200655 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000656 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000657 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000658};
659
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200660static const mbedtls_cipher_info_t camellia_192_cbc_info = {
661 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
662 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000663 192,
664 "CAMELLIA-192-CBC",
665 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200666 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000667 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000668 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000669};
670
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200671static const mbedtls_cipher_info_t camellia_256_cbc_info = {
672 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
673 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000674 256,
675 "CAMELLIA-256-CBC",
676 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200677 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000678 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000679 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000680};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200681#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000682
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200683#if defined(MBEDTLS_CIPHER_MODE_CFB)
684static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
685 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
686 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000687 128,
688 "CAMELLIA-128-CFB128",
689 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200690 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000691 16,
692 &camellia_info
693};
694
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200695static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
696 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
697 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000698 192,
699 "CAMELLIA-192-CFB128",
700 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200701 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000702 16,
703 &camellia_info
704};
705
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200706static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
707 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
708 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000709 256,
710 "CAMELLIA-256-CFB128",
711 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200712 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000713 16,
714 &camellia_info
715};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200716#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000717
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200718#if defined(MBEDTLS_CIPHER_MODE_CTR)
719static const mbedtls_cipher_info_t camellia_128_ctr_info = {
720 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
721 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000722 128,
723 "CAMELLIA-128-CTR",
724 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200725 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000726 16,
727 &camellia_info
728};
729
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200730static const mbedtls_cipher_info_t camellia_192_ctr_info = {
731 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
732 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000733 192,
734 "CAMELLIA-192-CTR",
735 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200736 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000737 16,
738 &camellia_info
739};
740
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200741static const mbedtls_cipher_info_t camellia_256_ctr_info = {
742 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
743 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000744 256,
745 "CAMELLIA-256-CTR",
746 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200747 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000748 16,
749 &camellia_info
750};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200751#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000752
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200753#if defined(MBEDTLS_GCM_C)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200754static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200755 unsigned int key_bitlen )
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200756{
Manuel Pégourié-Gonnardc34e8dd2015-04-28 21:42:17 +0200757 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200758 key, key_bitlen );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200759}
760
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200761static const mbedtls_cipher_base_t gcm_camellia_info = {
762 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200763 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200764#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200765 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100766#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200767#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200768 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100769#endif
Simon Butcher91e254c2018-04-22 22:58:07 +0100770#if defined(MBEDTLS_CIPHER_MODE_OFB)
771 NULL,
772#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200773#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200774 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100775#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200776#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200777 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100778#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200779 gcm_camellia_setkey_wrap,
780 gcm_camellia_setkey_wrap,
781 gcm_ctx_alloc,
782 gcm_ctx_free,
783};
784
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200785static const mbedtls_cipher_info_t camellia_128_gcm_info = {
786 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
787 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200788 128,
789 "CAMELLIA-128-GCM",
790 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200791 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200792 16,
793 &gcm_camellia_info
794};
795
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200796static const mbedtls_cipher_info_t camellia_192_gcm_info = {
797 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
798 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200799 192,
800 "CAMELLIA-192-GCM",
801 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200802 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200803 16,
804 &gcm_camellia_info
805};
806
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200807static const mbedtls_cipher_info_t camellia_256_gcm_info = {
808 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
809 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200810 256,
811 "CAMELLIA-256-GCM",
812 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200813 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200814 16,
815 &gcm_camellia_info
816};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200817#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200818
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200819#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200820static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200821 unsigned int key_bitlen )
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200822{
Manuel Pégourié-Gonnard6963ff02015-04-28 18:02:54 +0200823 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200824 key, key_bitlen );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200825}
826
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200827static const mbedtls_cipher_base_t ccm_camellia_info = {
828 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200829 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200830#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200831 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100832#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200833#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200834 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100835#endif
Simon Butcher91e254c2018-04-22 22:58:07 +0100836#if defined(MBEDTLS_CIPHER_MODE_OFB)
837 NULL,
838#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200839#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200840 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100841#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200842#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200843 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100844#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200845 ccm_camellia_setkey_wrap,
846 ccm_camellia_setkey_wrap,
847 ccm_ctx_alloc,
848 ccm_ctx_free,
849};
850
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200851static const mbedtls_cipher_info_t camellia_128_ccm_info = {
852 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
853 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200854 128,
855 "CAMELLIA-128-CCM",
856 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200857 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200858 16,
859 &ccm_camellia_info
860};
861
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200862static const mbedtls_cipher_info_t camellia_192_ccm_info = {
863 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
864 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200865 192,
866 "CAMELLIA-192-CCM",
867 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200868 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200869 16,
870 &ccm_camellia_info
871};
872
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200873static const mbedtls_cipher_info_t camellia_256_ccm_info = {
874 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
875 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200876 256,
877 "CAMELLIA-256-CCM",
878 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200879 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200880 16,
881 &ccm_camellia_info
882};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200883#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200884
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200885#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000886
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200887#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000888
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200889static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200890 const unsigned char *input, unsigned char *output )
891{
892 ((void) operation);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200893 return mbedtls_des_crypt_ecb( (mbedtls_des_context *) ctx, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200894}
895
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200896static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200897 const unsigned char *input, unsigned char *output )
898{
899 ((void) operation);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200900 return mbedtls_des3_crypt_ecb( (mbedtls_des3_context *) ctx, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200901}
902
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200903#if defined(MBEDTLS_CIPHER_MODE_CBC)
904static int des_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000905 unsigned char *iv, const unsigned char *input, unsigned char *output )
906{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200907 return mbedtls_des_crypt_cbc( (mbedtls_des_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200908 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000909}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200910#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000911
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200912#if defined(MBEDTLS_CIPHER_MODE_CBC)
913static int des3_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000914 unsigned char *iv, const unsigned char *input, unsigned char *output )
915{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200916 return mbedtls_des3_crypt_cbc( (mbedtls_des3_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200917 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000918}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200919#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000920
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200921static int des_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200922 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000923{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200924 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000925
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200926 return mbedtls_des_setkey_dec( (mbedtls_des_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000927}
928
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200929static int des_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200930 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000931{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200932 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000933
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200934 return mbedtls_des_setkey_enc( (mbedtls_des_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000935}
936
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200937static int des3_set2key_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200938 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000939{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200940 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000941
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200942 return mbedtls_des3_set2key_dec( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000943}
944
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200945static int des3_set2key_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200946 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000947{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200948 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000949
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200950 return mbedtls_des3_set2key_enc( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000951}
952
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200953static int des3_set3key_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200954 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000955{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200956 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000957
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200958 return mbedtls_des3_set3key_dec( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000959}
960
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200961static int des3_set3key_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200962 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000963{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200964 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000965
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200966 return mbedtls_des3_set3key_enc( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000967}
968
969static void * des_ctx_alloc( void )
970{
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200971 mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000972
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200973 if( des == NULL )
974 return( NULL );
975
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200976 mbedtls_des_init( des );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200977
978 return( des );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000979}
980
981static void des_ctx_free( void *ctx )
982{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200983 mbedtls_des_free( (mbedtls_des_context *) ctx );
984 mbedtls_free( ctx );
Paul Bakker34617722014-06-13 17:20:13 +0200985}
986
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200987static void * des3_ctx_alloc( void )
988{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200989 mbedtls_des3_context *des3;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200990 des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200991
992 if( des3 == NULL )
993 return( NULL );
994
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200995 mbedtls_des3_init( des3 );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200996
997 return( des3 );
998}
999
Paul Bakker34617722014-06-13 17:20:13 +02001000static void des3_ctx_free( void *ctx )
1001{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001002 mbedtls_des3_free( (mbedtls_des3_context *) ctx );
1003 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +00001004}
1005
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001006static const mbedtls_cipher_base_t des_info = {
1007 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001008 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001009#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001010 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001011#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001012#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001013 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001014#endif
Simon Butcher91e254c2018-04-22 22:58:07 +01001015#if defined(MBEDTLS_CIPHER_MODE_OFB)
1016 NULL,
1017#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001018#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001019 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001020#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001021#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001022 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001023#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001024 des_setkey_enc_wrap,
1025 des_setkey_dec_wrap,
1026 des_ctx_alloc,
1027 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001028};
1029
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001030static const mbedtls_cipher_info_t des_ecb_info = {
1031 MBEDTLS_CIPHER_DES_ECB,
1032 MBEDTLS_MODE_ECB,
1033 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001034 "DES-ECB",
1035 8,
1036 0,
1037 8,
1038 &des_info
1039};
1040
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001041#if defined(MBEDTLS_CIPHER_MODE_CBC)
1042static const mbedtls_cipher_info_t des_cbc_info = {
1043 MBEDTLS_CIPHER_DES_CBC,
1044 MBEDTLS_MODE_CBC,
1045 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker343a8702011-06-09 14:27:58 +00001046 "DES-CBC",
1047 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001048 0,
Paul Bakker343a8702011-06-09 14:27:58 +00001049 8,
1050 &des_info
1051};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001052#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001053
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001054static const mbedtls_cipher_base_t des_ede_info = {
1055 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001056 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001057#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001058 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001059#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001060#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001061 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001062#endif
Simon Butcher91e254c2018-04-22 22:58:07 +01001063#if defined(MBEDTLS_CIPHER_MODE_OFB)
1064 NULL,
1065#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001066#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001067 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001068#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001069#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001070 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001071#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001072 des3_set2key_enc_wrap,
1073 des3_set2key_dec_wrap,
1074 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001075 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001076};
1077
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001078static const mbedtls_cipher_info_t des_ede_ecb_info = {
1079 MBEDTLS_CIPHER_DES_EDE_ECB,
1080 MBEDTLS_MODE_ECB,
1081 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001082 "DES-EDE-ECB",
1083 8,
1084 0,
1085 8,
1086 &des_ede_info
1087};
1088
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001089#if defined(MBEDTLS_CIPHER_MODE_CBC)
1090static const mbedtls_cipher_info_t des_ede_cbc_info = {
1091 MBEDTLS_CIPHER_DES_EDE_CBC,
1092 MBEDTLS_MODE_CBC,
1093 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker343a8702011-06-09 14:27:58 +00001094 "DES-EDE-CBC",
Paul Bakker0e342352013-06-24 19:33:02 +02001095 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001096 0,
Paul Bakker0e342352013-06-24 19:33:02 +02001097 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001098 &des_ede_info
1099};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001100#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001101
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001102static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001103 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001104 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001105#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001106 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001107#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001108#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001109 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001110#endif
Simon Butcher91e254c2018-04-22 22:58:07 +01001111#if defined(MBEDTLS_CIPHER_MODE_OFB)
1112 NULL,
1113#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001114#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001115 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001116#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001117#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001118 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001119#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001120 des3_set3key_enc_wrap,
1121 des3_set3key_dec_wrap,
1122 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001123 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001124};
1125
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001126static const mbedtls_cipher_info_t des_ede3_ecb_info = {
1127 MBEDTLS_CIPHER_DES_EDE3_ECB,
1128 MBEDTLS_MODE_ECB,
1129 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001130 "DES-EDE3-ECB",
1131 8,
1132 0,
1133 8,
1134 &des_ede3_info
1135};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001136#if defined(MBEDTLS_CIPHER_MODE_CBC)
1137static const mbedtls_cipher_info_t des_ede3_cbc_info = {
1138 MBEDTLS_CIPHER_DES_EDE3_CBC,
1139 MBEDTLS_MODE_CBC,
1140 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker23986e52011-04-24 08:57:21 +00001141 "DES-EDE3-CBC",
1142 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001143 0,
Paul Bakker23986e52011-04-24 08:57:21 +00001144 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001145 &des_ede3_info
Paul Bakker8123e9d2011-01-06 15:37:30 +00001146};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001147#endif /* MBEDTLS_CIPHER_MODE_CBC */
1148#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001149
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001150#if defined(MBEDTLS_BLOWFISH_C)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001151
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001152static int blowfish_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001153 const unsigned char *input, unsigned char *output )
1154{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001155 return mbedtls_blowfish_crypt_ecb( (mbedtls_blowfish_context *) ctx, operation, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001156 output );
Paul Bakker5e0efa72013-09-08 23:04:04 +02001157}
1158
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001159#if defined(MBEDTLS_CIPHER_MODE_CBC)
1160static int blowfish_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001161 size_t length, unsigned char *iv, const unsigned char *input,
1162 unsigned char *output )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001163{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001164 return mbedtls_blowfish_crypt_cbc( (mbedtls_blowfish_context *) ctx, operation, length, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001165 input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001166}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001167#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001168
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001169#if defined(MBEDTLS_CIPHER_MODE_CFB)
1170static int blowfish_crypt_cfb64_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001171 size_t length, size_t *iv_off, unsigned char *iv,
1172 const unsigned char *input, unsigned char *output )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001173{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001174 return mbedtls_blowfish_crypt_cfb64( (mbedtls_blowfish_context *) ctx, operation, length,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001175 iv_off, iv, input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001176}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001177#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001178
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001179#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001180static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
1181 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001182 const unsigned char *input, unsigned char *output )
1183{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001184 return mbedtls_blowfish_crypt_ctr( (mbedtls_blowfish_context *) ctx, length, nc_off,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001185 nonce_counter, stream_block, input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001186}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001187#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001188
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001189static int blowfish_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001190 unsigned int key_bitlen )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001191{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001192 return mbedtls_blowfish_setkey( (mbedtls_blowfish_context *) ctx, key, key_bitlen );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001193}
1194
1195static void * blowfish_ctx_alloc( void )
1196{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001197 mbedtls_blowfish_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +02001198 ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001199
1200 if( ctx == NULL )
1201 return( NULL );
1202
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001203 mbedtls_blowfish_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001204
1205 return( ctx );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001206}
1207
1208static void blowfish_ctx_free( void *ctx )
1209{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001210 mbedtls_blowfish_free( (mbedtls_blowfish_context *) ctx );
1211 mbedtls_free( ctx );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001212}
1213
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001214static const mbedtls_cipher_base_t blowfish_info = {
1215 MBEDTLS_CIPHER_ID_BLOWFISH,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001216 blowfish_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001217#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001218 blowfish_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001219#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001220#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001221 blowfish_crypt_cfb64_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001222#endif
Simon Butcher91e254c2018-04-22 22:58:07 +01001223#if defined(MBEDTLS_CIPHER_MODE_OFB)
1224 NULL,
1225#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001226#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001227 blowfish_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001228#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001229#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001230 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001231#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001232 blowfish_setkey_wrap,
1233 blowfish_setkey_wrap,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001234 blowfish_ctx_alloc,
1235 blowfish_ctx_free
1236};
1237
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001238static const mbedtls_cipher_info_t blowfish_ecb_info = {
1239 MBEDTLS_CIPHER_BLOWFISH_ECB,
1240 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001241 128,
1242 "BLOWFISH-ECB",
1243 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001244 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001245 8,
1246 &blowfish_info
1247};
1248
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001249#if defined(MBEDTLS_CIPHER_MODE_CBC)
1250static const mbedtls_cipher_info_t blowfish_cbc_info = {
1251 MBEDTLS_CIPHER_BLOWFISH_CBC,
1252 MBEDTLS_MODE_CBC,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001253 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001254 "BLOWFISH-CBC",
1255 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001256 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001257 8,
1258 &blowfish_info
1259};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001260#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001261
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001262#if defined(MBEDTLS_CIPHER_MODE_CFB)
1263static const mbedtls_cipher_info_t blowfish_cfb64_info = {
1264 MBEDTLS_CIPHER_BLOWFISH_CFB64,
1265 MBEDTLS_MODE_CFB,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001266 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001267 "BLOWFISH-CFB64",
1268 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001269 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001270 8,
1271 &blowfish_info
1272};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001273#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001274
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001275#if defined(MBEDTLS_CIPHER_MODE_CTR)
1276static const mbedtls_cipher_info_t blowfish_ctr_info = {
1277 MBEDTLS_CIPHER_BLOWFISH_CTR,
1278 MBEDTLS_MODE_CTR,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001279 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001280 "BLOWFISH-CTR",
1281 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001282 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001283 8,
1284 &blowfish_info
1285};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001286#endif /* MBEDTLS_CIPHER_MODE_CTR */
1287#endif /* MBEDTLS_BLOWFISH_C */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001288
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001289#if defined(MBEDTLS_ARC4_C)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001290static int arc4_crypt_stream_wrap( void *ctx, size_t length,
1291 const unsigned char *input,
1292 unsigned char *output )
Paul Bakker68884e32013-01-07 18:20:04 +01001293{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001294 return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) );
Paul Bakker68884e32013-01-07 18:20:04 +01001295}
1296
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001297static int arc4_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001298 unsigned int key_bitlen )
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001299{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001300 /* we get key_bitlen in bits, arc4 expects it in bytes */
1301 if( key_bitlen % 8 != 0 )
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001302 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
Manuel Pégourié-Gonnardce411252013-09-04 12:28:37 +02001303
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001304 mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 );
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001305 return( 0 );
1306}
1307
1308static void * arc4_ctx_alloc( void )
1309{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001310 mbedtls_arc4_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +02001311 ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001312
1313 if( ctx == NULL )
1314 return( NULL );
1315
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001316 mbedtls_arc4_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001317
1318 return( ctx );
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001319}
Paul Bakker68884e32013-01-07 18:20:04 +01001320
1321static void arc4_ctx_free( void *ctx )
1322{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001323 mbedtls_arc4_free( (mbedtls_arc4_context *) ctx );
1324 mbedtls_free( ctx );
Paul Bakker68884e32013-01-07 18:20:04 +01001325}
1326
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001327static const mbedtls_cipher_base_t arc4_base_info = {
1328 MBEDTLS_CIPHER_ID_ARC4,
Paul Bakker68884e32013-01-07 18:20:04 +01001329 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001330#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker68884e32013-01-07 18:20:04 +01001331 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001332#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001333#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker68884e32013-01-07 18:20:04 +01001334 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001335#endif
Simon Butcher91e254c2018-04-22 22:58:07 +01001336#if defined(MBEDTLS_CIPHER_MODE_OFB)
1337 NULL,
1338#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001339#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001340 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001341#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001342#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001343 arc4_crypt_stream_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001344#endif
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001345 arc4_setkey_wrap,
1346 arc4_setkey_wrap,
Paul Bakker68884e32013-01-07 18:20:04 +01001347 arc4_ctx_alloc,
1348 arc4_ctx_free
1349};
1350
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001351static const mbedtls_cipher_info_t arc4_128_info = {
1352 MBEDTLS_CIPHER_ARC4_128,
1353 MBEDTLS_MODE_STREAM,
Paul Bakker68884e32013-01-07 18:20:04 +01001354 128,
1355 "ARC4-128",
1356 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001357 0,
Paul Bakker68884e32013-01-07 18:20:04 +01001358 1,
1359 &arc4_base_info
1360};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001361#endif /* MBEDTLS_ARC4_C */
Paul Bakker68884e32013-01-07 18:20:04 +01001362
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001363#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001364static int null_crypt_stream( void *ctx, size_t length,
1365 const unsigned char *input,
1366 unsigned char *output )
1367{
1368 ((void) ctx);
1369 memmove( output, input, length );
1370 return( 0 );
1371}
1372
1373static int null_setkey( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001374 unsigned int key_bitlen )
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001375{
1376 ((void) ctx);
1377 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001378 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001379
1380 return( 0 );
1381}
1382
Paul Bakkerfab5c822012-02-06 16:45:10 +00001383static void * null_ctx_alloc( void )
1384{
Manuel Pégourié-Gonnard86bbc7f2014-07-12 02:14:41 +02001385 return( (void *) 1 );
Paul Bakkerfab5c822012-02-06 16:45:10 +00001386}
1387
Paul Bakkerfab5c822012-02-06 16:45:10 +00001388static void null_ctx_free( void *ctx )
1389{
1390 ((void) ctx);
1391}
1392
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001393static const mbedtls_cipher_base_t null_base_info = {
1394 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001395 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001396#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001397 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001398#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001399#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001400 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001401#endif
Simon Butchera3f3f162018-04-29 00:24:51 +01001402#if defined(MBEDTLS_CIPHER_MODE_OFB)
1403 NULL,
1404#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001405#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001406 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001407#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001408#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001409 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001410#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001411 null_setkey,
1412 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001413 null_ctx_alloc,
1414 null_ctx_free
1415};
1416
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001417static const mbedtls_cipher_info_t null_cipher_info = {
1418 MBEDTLS_CIPHER_NULL,
1419 MBEDTLS_MODE_STREAM,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001420 0,
1421 "NULL",
Paul Bakker68884e32013-01-07 18:20:04 +01001422 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001423 0,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001424 1,
1425 &null_base_info
1426};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001427#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00001428
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001429const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001430{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001431#if defined(MBEDTLS_AES_C)
1432 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
1433 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
1434 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
1435#if defined(MBEDTLS_CIPHER_MODE_CBC)
1436 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
1437 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
1438 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001439#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001440#if defined(MBEDTLS_CIPHER_MODE_CFB)
1441 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
1442 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
1443 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001444#endif
Simon Butcher91e254c2018-04-22 22:58:07 +01001445#if defined(MBEDTLS_CIPHER_MODE_OFB)
1446 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
1447 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
1448 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
1449#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001450#if defined(MBEDTLS_CIPHER_MODE_CTR)
1451 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
1452 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
1453 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001454#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001455#if defined(MBEDTLS_GCM_C)
1456 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
1457 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
1458 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001459#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001460#if defined(MBEDTLS_CCM_C)
1461 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
1462 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
1463 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001464#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001465#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001466
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001467#if defined(MBEDTLS_ARC4_C)
1468 { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001469#endif
1470
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001471#if defined(MBEDTLS_BLOWFISH_C)
1472 { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info },
1473#if defined(MBEDTLS_CIPHER_MODE_CBC)
1474 { MBEDTLS_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001475#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001476#if defined(MBEDTLS_CIPHER_MODE_CFB)
1477 { MBEDTLS_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001478#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001479#if defined(MBEDTLS_CIPHER_MODE_CTR)
1480 { MBEDTLS_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001481#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001482#endif /* MBEDTLS_BLOWFISH_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001483
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001484#if defined(MBEDTLS_CAMELLIA_C)
1485 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
1486 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
1487 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
1488#if defined(MBEDTLS_CIPHER_MODE_CBC)
1489 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
1490 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
1491 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001492#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001493#if defined(MBEDTLS_CIPHER_MODE_CFB)
1494 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
1495 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
1496 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001497#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001498#if defined(MBEDTLS_CIPHER_MODE_CTR)
1499 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
1500 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
1501 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001502#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001503#if defined(MBEDTLS_GCM_C)
1504 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
1505 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
1506 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001507#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001508#if defined(MBEDTLS_CCM_C)
1509 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
1510 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
1511 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001512#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001513#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001514
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001515#if defined(MBEDTLS_DES_C)
1516 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
1517 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
1518 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
1519#if defined(MBEDTLS_CIPHER_MODE_CBC)
1520 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
1521 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
1522 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001523#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001524#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001525
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001526#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
1527 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
1528#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001529
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001530 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001531};
1532
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001533#define NUM_CIPHERS sizeof mbedtls_cipher_definitions / sizeof mbedtls_cipher_definitions[0]
1534int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001535
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001536#endif /* MBEDTLS_CIPHER_C */