blob: 5c8082850b163660acf843a6d5978aedf71c9467 [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é-Gonnarddca3a5d2018-05-07 10:43:27 +020036#if defined(MBEDTLS_CHACHAPOLY_C)
37#include "mbedtls/chachapoly.h"
Daniel King8fe47012016-05-17 20:33:28 -030038#endif
39
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020040#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000041#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000042#endif
43
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020044#if defined(MBEDTLS_ARC4_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000045#include "mbedtls/arc4.h"
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +020046#endif
47
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020048#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000049#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000050#endif
51
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020052#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000053#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000054#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000055
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020056#if defined(MBEDTLS_BLOWFISH_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000057#include "mbedtls/blowfish.h"
Paul Bakker6132d0a2012-07-04 17:10:40 +000058#endif
59
Daniel Kingbd920622016-05-15 19:56:20 -030060#if defined(MBEDTLS_CHACHA20_C)
61#include "mbedtls/chacha20.h"
62#endif
63
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020064#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000065#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020066#endif
67
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020068#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000069#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020070#endif
71
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020072#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000073#include <string.h>
74#endif
75
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020076#if defined(MBEDTLS_PLATFORM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000077#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020078#else
Rich Evans00ab4702015-02-06 13:43:58 +000079#include <stdlib.h>
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +020080#define mbedtls_calloc calloc
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020081#define mbedtls_free free
Paul Bakker6e339b52013-07-03 13:37:05 +020082#endif
83
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020084#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020085/* shared by all GCM ciphers */
86static void *gcm_ctx_alloc( void )
87{
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +020088 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) );
89
90 if( ctx != NULL )
91 mbedtls_gcm_init( (mbedtls_gcm_context *) ctx );
92
93 return( ctx );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +020094}
95
96static void gcm_ctx_free( void *ctx )
97{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020098 mbedtls_gcm_free( ctx );
99 mbedtls_free( ctx );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200100}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200101#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200102
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200103#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200104/* shared by all CCM ciphers */
105static void *ccm_ctx_alloc( void )
106{
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200107 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) );
108
109 if( ctx != NULL )
110 mbedtls_ccm_init( (mbedtls_ccm_context *) ctx );
111
112 return( ctx );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200113}
114
115static void ccm_ctx_free( void *ctx )
116{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200117 mbedtls_ccm_free( ctx );
118 mbedtls_free( ctx );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200119}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200120#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200121
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200122#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000123
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200124static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200125 const unsigned char *input, unsigned char *output )
126{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200127 return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200128}
129
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200130#if defined(MBEDTLS_CIPHER_MODE_CBC)
131static int aes_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000132 unsigned char *iv, const unsigned char *input, unsigned char *output )
133{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200134 return mbedtls_aes_crypt_cbc( (mbedtls_aes_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200135 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000136}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200137#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000138
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200139#if defined(MBEDTLS_CIPHER_MODE_CFB)
140static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200141 size_t length, size_t *iv_off, unsigned char *iv,
142 const unsigned char *input, unsigned char *output )
Paul Bakker343a8702011-06-09 14:27:58 +0000143{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200144 return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200145 input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000146}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200147#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000148
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200149#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200150static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
151 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker343a8702011-06-09 14:27:58 +0000152 const unsigned char *input, unsigned char *output )
153{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200154 return mbedtls_aes_crypt_ctr( (mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
Paul Bakker343a8702011-06-09 14:27:58 +0000155 stream_block, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000156}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200157#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000158
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200159static int aes_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200160 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000161{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200162 return mbedtls_aes_setkey_dec( (mbedtls_aes_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000163}
164
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200165static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200166 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000167{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200168 return mbedtls_aes_setkey_enc( (mbedtls_aes_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000169}
170
171static void * aes_ctx_alloc( void )
172{
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200173 mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200174
175 if( aes == NULL )
176 return( NULL );
177
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200178 mbedtls_aes_init( aes );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200179
180 return( aes );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000181}
182
183static void aes_ctx_free( void *ctx )
184{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200185 mbedtls_aes_free( (mbedtls_aes_context *) ctx );
186 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000187}
188
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200189static const mbedtls_cipher_base_t aes_info = {
190 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200191 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200192#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000193 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100194#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200195#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000196 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100197#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200198#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000199 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100200#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200201#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200202 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100203#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000204 aes_setkey_enc_wrap,
205 aes_setkey_dec_wrap,
206 aes_ctx_alloc,
207 aes_ctx_free
208};
209
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200210static const mbedtls_cipher_info_t aes_128_ecb_info = {
211 MBEDTLS_CIPHER_AES_128_ECB,
212 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200213 128,
214 "AES-128-ECB",
215 16,
216 0,
217 16,
218 &aes_info
219};
220
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200221static const mbedtls_cipher_info_t aes_192_ecb_info = {
222 MBEDTLS_CIPHER_AES_192_ECB,
223 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200224 192,
225 "AES-192-ECB",
226 16,
227 0,
228 16,
229 &aes_info
230};
231
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200232static const mbedtls_cipher_info_t aes_256_ecb_info = {
233 MBEDTLS_CIPHER_AES_256_ECB,
234 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200235 256,
236 "AES-256-ECB",
237 16,
238 0,
239 16,
240 &aes_info
241};
242
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200243#if defined(MBEDTLS_CIPHER_MODE_CBC)
244static const mbedtls_cipher_info_t aes_128_cbc_info = {
245 MBEDTLS_CIPHER_AES_128_CBC,
246 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000247 128,
248 "AES-128-CBC",
249 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200250 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000251 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000252 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000253};
254
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200255static const mbedtls_cipher_info_t aes_192_cbc_info = {
256 MBEDTLS_CIPHER_AES_192_CBC,
257 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000258 192,
259 "AES-192-CBC",
260 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200261 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000262 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000263 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000264};
265
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200266static const mbedtls_cipher_info_t aes_256_cbc_info = {
267 MBEDTLS_CIPHER_AES_256_CBC,
268 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000269 256,
270 "AES-256-CBC",
271 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200272 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000273 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000274 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000275};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200276#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000277
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200278#if defined(MBEDTLS_CIPHER_MODE_CFB)
279static const mbedtls_cipher_info_t aes_128_cfb128_info = {
280 MBEDTLS_CIPHER_AES_128_CFB128,
281 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000282 128,
283 "AES-128-CFB128",
284 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200285 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000286 16,
287 &aes_info
288};
289
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200290static const mbedtls_cipher_info_t aes_192_cfb128_info = {
291 MBEDTLS_CIPHER_AES_192_CFB128,
292 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000293 192,
294 "AES-192-CFB128",
295 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200296 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000297 16,
298 &aes_info
299};
300
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200301static const mbedtls_cipher_info_t aes_256_cfb128_info = {
302 MBEDTLS_CIPHER_AES_256_CFB128,
303 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000304 256,
305 "AES-256-CFB128",
306 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200307 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000308 16,
309 &aes_info
310};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200311#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000312
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200313#if defined(MBEDTLS_CIPHER_MODE_CTR)
314static const mbedtls_cipher_info_t aes_128_ctr_info = {
315 MBEDTLS_CIPHER_AES_128_CTR,
316 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000317 128,
318 "AES-128-CTR",
319 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200320 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000321 16,
322 &aes_info
323};
324
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200325static const mbedtls_cipher_info_t aes_192_ctr_info = {
326 MBEDTLS_CIPHER_AES_192_CTR,
327 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000328 192,
329 "AES-192-CTR",
330 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200331 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000332 16,
333 &aes_info
334};
335
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200336static const mbedtls_cipher_info_t aes_256_ctr_info = {
337 MBEDTLS_CIPHER_AES_256_CTR,
338 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000339 256,
340 "AES-256-CTR",
341 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200342 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000343 16,
344 &aes_info
345};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200346#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000347
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200348#if defined(MBEDTLS_GCM_C)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200349static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200350 unsigned int key_bitlen )
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200351{
Manuel Pégourié-Gonnardc34e8dd2015-04-28 21:42:17 +0200352 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200353 key, key_bitlen );
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200354}
355
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200356static const mbedtls_cipher_base_t gcm_aes_info = {
357 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200358 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200359#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200360 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100361#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200362#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200363 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100364#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200365#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200366 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100367#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200368#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200369 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100370#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200371 gcm_aes_setkey_wrap,
372 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200373 gcm_ctx_alloc,
374 gcm_ctx_free,
375};
376
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200377static const mbedtls_cipher_info_t aes_128_gcm_info = {
378 MBEDTLS_CIPHER_AES_128_GCM,
379 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100380 128,
381 "AES-128-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200382 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200383 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100384 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200385 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100386};
387
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200388static const mbedtls_cipher_info_t aes_192_gcm_info = {
389 MBEDTLS_CIPHER_AES_192_GCM,
390 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200391 192,
392 "AES-192-GCM",
393 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200394 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200395 16,
396 &gcm_aes_info
397};
398
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200399static const mbedtls_cipher_info_t aes_256_gcm_info = {
400 MBEDTLS_CIPHER_AES_256_GCM,
401 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100402 256,
403 "AES-256-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200404 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200405 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100406 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200407 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100408};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200409#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100410
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200411#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200412static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200413 unsigned int key_bitlen )
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200414{
Manuel Pégourié-Gonnard6963ff02015-04-28 18:02:54 +0200415 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200416 key, key_bitlen );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200417}
418
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200419static const mbedtls_cipher_base_t ccm_aes_info = {
420 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200421 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200422#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200423 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100424#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200425#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200426 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100427#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200428#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200429 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100430#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200431#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200432 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100433#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200434 ccm_aes_setkey_wrap,
435 ccm_aes_setkey_wrap,
436 ccm_ctx_alloc,
437 ccm_ctx_free,
438};
439
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200440static const mbedtls_cipher_info_t aes_128_ccm_info = {
441 MBEDTLS_CIPHER_AES_128_CCM,
442 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200443 128,
444 "AES-128-CCM",
445 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200446 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200447 16,
448 &ccm_aes_info
449};
450
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200451static const mbedtls_cipher_info_t aes_192_ccm_info = {
452 MBEDTLS_CIPHER_AES_192_CCM,
453 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200454 192,
455 "AES-192-CCM",
456 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200457 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200458 16,
459 &ccm_aes_info
460};
461
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200462static const mbedtls_cipher_info_t aes_256_ccm_info = {
463 MBEDTLS_CIPHER_AES_256_CCM,
464 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200465 256,
466 "AES-256-CCM",
467 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200468 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200469 16,
470 &ccm_aes_info
471};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200472#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200473
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200474#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000475
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200476#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000477
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200478static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200479 const unsigned char *input, unsigned char *output )
480{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200481 return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200482 output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200483}
484
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200485#if defined(MBEDTLS_CIPHER_MODE_CBC)
486static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200487 size_t length, unsigned char *iv,
488 const unsigned char *input, unsigned char *output )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000489{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200490 return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200491 input, output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000492}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200493#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000494
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200495#if defined(MBEDTLS_CIPHER_MODE_CFB)
496static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200497 size_t length, size_t *iv_off, unsigned char *iv,
498 const unsigned char *input, unsigned char *output )
Paul Bakker343a8702011-06-09 14:27:58 +0000499{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200500 return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200501 iv_off, iv, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000502}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200503#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000504
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200505#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200506static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
507 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker343a8702011-06-09 14:27:58 +0000508 const unsigned char *input, unsigned char *output )
509{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200510 return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200511 nonce_counter, stream_block, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000512}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200513#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000514
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200515static int camellia_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200516 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000517{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200518 return mbedtls_camellia_setkey_dec( (mbedtls_camellia_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000519}
520
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200521static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200522 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000523{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200524 return mbedtls_camellia_setkey_enc( (mbedtls_camellia_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000525}
526
527static void * camellia_ctx_alloc( void )
528{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200529 mbedtls_camellia_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200530 ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200531
532 if( ctx == NULL )
533 return( NULL );
534
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200535 mbedtls_camellia_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200536
537 return( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000538}
539
540static void camellia_ctx_free( void *ctx )
541{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200542 mbedtls_camellia_free( (mbedtls_camellia_context *) ctx );
543 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000544}
545
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200546static const mbedtls_cipher_base_t camellia_info = {
547 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200548 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200549#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000550 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100551#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200552#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000553 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100554#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200555#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000556 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100557#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200558#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200559 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100560#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000561 camellia_setkey_enc_wrap,
562 camellia_setkey_dec_wrap,
563 camellia_ctx_alloc,
564 camellia_ctx_free
565};
566
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200567static const mbedtls_cipher_info_t camellia_128_ecb_info = {
568 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
569 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200570 128,
571 "CAMELLIA-128-ECB",
572 16,
573 0,
574 16,
575 &camellia_info
576};
577
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200578static const mbedtls_cipher_info_t camellia_192_ecb_info = {
579 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
580 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200581 192,
582 "CAMELLIA-192-ECB",
583 16,
584 0,
585 16,
586 &camellia_info
587};
588
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200589static const mbedtls_cipher_info_t camellia_256_ecb_info = {
590 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
591 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200592 256,
593 "CAMELLIA-256-ECB",
594 16,
595 0,
596 16,
597 &camellia_info
598};
599
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200600#if defined(MBEDTLS_CIPHER_MODE_CBC)
601static const mbedtls_cipher_info_t camellia_128_cbc_info = {
602 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
603 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000604 128,
605 "CAMELLIA-128-CBC",
606 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200607 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000608 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000609 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000610};
611
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200612static const mbedtls_cipher_info_t camellia_192_cbc_info = {
613 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
614 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000615 192,
616 "CAMELLIA-192-CBC",
617 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200618 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000619 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000620 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000621};
622
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200623static const mbedtls_cipher_info_t camellia_256_cbc_info = {
624 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
625 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000626 256,
627 "CAMELLIA-256-CBC",
628 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200629 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000630 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000631 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000632};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200633#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000634
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200635#if defined(MBEDTLS_CIPHER_MODE_CFB)
636static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
637 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
638 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000639 128,
640 "CAMELLIA-128-CFB128",
641 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200642 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000643 16,
644 &camellia_info
645};
646
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200647static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
648 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
649 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000650 192,
651 "CAMELLIA-192-CFB128",
652 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200653 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000654 16,
655 &camellia_info
656};
657
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200658static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
659 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
660 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000661 256,
662 "CAMELLIA-256-CFB128",
663 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200664 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000665 16,
666 &camellia_info
667};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200668#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000669
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200670#if defined(MBEDTLS_CIPHER_MODE_CTR)
671static const mbedtls_cipher_info_t camellia_128_ctr_info = {
672 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
673 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000674 128,
675 "CAMELLIA-128-CTR",
676 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200677 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000678 16,
679 &camellia_info
680};
681
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200682static const mbedtls_cipher_info_t camellia_192_ctr_info = {
683 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
684 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000685 192,
686 "CAMELLIA-192-CTR",
687 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200688 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000689 16,
690 &camellia_info
691};
692
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200693static const mbedtls_cipher_info_t camellia_256_ctr_info = {
694 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
695 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000696 256,
697 "CAMELLIA-256-CTR",
698 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200699 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000700 16,
701 &camellia_info
702};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200703#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000704
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200705#if defined(MBEDTLS_GCM_C)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200706static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200707 unsigned int key_bitlen )
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200708{
Manuel Pégourié-Gonnardc34e8dd2015-04-28 21:42:17 +0200709 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200710 key, key_bitlen );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200711}
712
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200713static const mbedtls_cipher_base_t gcm_camellia_info = {
714 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200715 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200716#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200717 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100718#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200719#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200720 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100721#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200722#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200723 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100724#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200725#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200726 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100727#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200728 gcm_camellia_setkey_wrap,
729 gcm_camellia_setkey_wrap,
730 gcm_ctx_alloc,
731 gcm_ctx_free,
732};
733
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200734static const mbedtls_cipher_info_t camellia_128_gcm_info = {
735 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
736 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200737 128,
738 "CAMELLIA-128-GCM",
739 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200740 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200741 16,
742 &gcm_camellia_info
743};
744
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200745static const mbedtls_cipher_info_t camellia_192_gcm_info = {
746 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
747 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200748 192,
749 "CAMELLIA-192-GCM",
750 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200751 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200752 16,
753 &gcm_camellia_info
754};
755
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200756static const mbedtls_cipher_info_t camellia_256_gcm_info = {
757 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
758 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200759 256,
760 "CAMELLIA-256-GCM",
761 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200762 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200763 16,
764 &gcm_camellia_info
765};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200766#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200767
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200768#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200769static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200770 unsigned int key_bitlen )
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200771{
Manuel Pégourié-Gonnard6963ff02015-04-28 18:02:54 +0200772 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200773 key, key_bitlen );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200774}
775
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200776static const mbedtls_cipher_base_t ccm_camellia_info = {
777 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200778 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200779#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200780 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100781#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200782#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200783 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100784#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200785#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200786 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100787#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200788#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200789 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100790#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200791 ccm_camellia_setkey_wrap,
792 ccm_camellia_setkey_wrap,
793 ccm_ctx_alloc,
794 ccm_ctx_free,
795};
796
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200797static const mbedtls_cipher_info_t camellia_128_ccm_info = {
798 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
799 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200800 128,
801 "CAMELLIA-128-CCM",
802 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200803 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200804 16,
805 &ccm_camellia_info
806};
807
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200808static const mbedtls_cipher_info_t camellia_192_ccm_info = {
809 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
810 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200811 192,
812 "CAMELLIA-192-CCM",
813 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200814 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200815 16,
816 &ccm_camellia_info
817};
818
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200819static const mbedtls_cipher_info_t camellia_256_ccm_info = {
820 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
821 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200822 256,
823 "CAMELLIA-256-CCM",
824 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200825 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200826 16,
827 &ccm_camellia_info
828};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200829#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200830
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200831#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000832
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200833#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000834
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200835static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200836 const unsigned char *input, unsigned char *output )
837{
838 ((void) operation);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200839 return mbedtls_des_crypt_ecb( (mbedtls_des_context *) ctx, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200840}
841
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200842static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200843 const unsigned char *input, unsigned char *output )
844{
845 ((void) operation);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200846 return mbedtls_des3_crypt_ecb( (mbedtls_des3_context *) ctx, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200847}
848
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200849#if defined(MBEDTLS_CIPHER_MODE_CBC)
850static int des_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000851 unsigned char *iv, const unsigned char *input, unsigned char *output )
852{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200853 return mbedtls_des_crypt_cbc( (mbedtls_des_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200854 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000855}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200856#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000857
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200858#if defined(MBEDTLS_CIPHER_MODE_CBC)
859static int des3_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000860 unsigned char *iv, const unsigned char *input, unsigned char *output )
861{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200862 return mbedtls_des3_crypt_cbc( (mbedtls_des3_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200863 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000864}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200865#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000866
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200867static int des_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200868 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000869{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200870 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000871
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200872 return mbedtls_des_setkey_dec( (mbedtls_des_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000873}
874
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200875static int des_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200876 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000877{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200878 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000879
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200880 return mbedtls_des_setkey_enc( (mbedtls_des_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000881}
882
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200883static int des3_set2key_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200884 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000885{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200886 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000887
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200888 return mbedtls_des3_set2key_dec( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000889}
890
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200891static int des3_set2key_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200892 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000893{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200894 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000895
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200896 return mbedtls_des3_set2key_enc( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000897}
898
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200899static int des3_set3key_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200900 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000901{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200902 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000903
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200904 return mbedtls_des3_set3key_dec( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000905}
906
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200907static int des3_set3key_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200908 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000909{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200910 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000911
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200912 return mbedtls_des3_set3key_enc( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000913}
914
915static void * des_ctx_alloc( void )
916{
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200917 mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000918
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200919 if( des == NULL )
920 return( NULL );
921
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200922 mbedtls_des_init( des );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200923
924 return( des );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000925}
926
927static void des_ctx_free( void *ctx )
928{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200929 mbedtls_des_free( (mbedtls_des_context *) ctx );
930 mbedtls_free( ctx );
Paul Bakker34617722014-06-13 17:20:13 +0200931}
932
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200933static void * des3_ctx_alloc( void )
934{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200935 mbedtls_des3_context *des3;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200936 des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200937
938 if( des3 == NULL )
939 return( NULL );
940
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200941 mbedtls_des3_init( des3 );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200942
943 return( des3 );
944}
945
Paul Bakker34617722014-06-13 17:20:13 +0200946static void des3_ctx_free( void *ctx )
947{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200948 mbedtls_des3_free( (mbedtls_des3_context *) ctx );
949 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000950}
951
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200952static const mbedtls_cipher_base_t des_info = {
953 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200954 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200955#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +0000956 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100957#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200958#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +0200959 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100960#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200961#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +0200962 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100963#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200964#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200965 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100966#endif
Paul Bakker23986e52011-04-24 08:57:21 +0000967 des_setkey_enc_wrap,
968 des_setkey_dec_wrap,
969 des_ctx_alloc,
970 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +0000971};
972
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200973static const mbedtls_cipher_info_t des_ecb_info = {
974 MBEDTLS_CIPHER_DES_ECB,
975 MBEDTLS_MODE_ECB,
976 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200977 "DES-ECB",
978 8,
979 0,
980 8,
981 &des_info
982};
983
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200984#if defined(MBEDTLS_CIPHER_MODE_CBC)
985static const mbedtls_cipher_info_t des_cbc_info = {
986 MBEDTLS_CIPHER_DES_CBC,
987 MBEDTLS_MODE_CBC,
988 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker343a8702011-06-09 14:27:58 +0000989 "DES-CBC",
990 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200991 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000992 8,
993 &des_info
994};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200995#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000996
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200997static const mbedtls_cipher_base_t des_ede_info = {
998 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200999 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001000#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001001 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001002#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001003#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001004 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001005#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001006#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001007 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001008#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001009#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001010 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001011#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001012 des3_set2key_enc_wrap,
1013 des3_set2key_dec_wrap,
1014 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001015 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001016};
1017
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001018static const mbedtls_cipher_info_t des_ede_ecb_info = {
1019 MBEDTLS_CIPHER_DES_EDE_ECB,
1020 MBEDTLS_MODE_ECB,
1021 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001022 "DES-EDE-ECB",
1023 8,
1024 0,
1025 8,
1026 &des_ede_info
1027};
1028
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001029#if defined(MBEDTLS_CIPHER_MODE_CBC)
1030static const mbedtls_cipher_info_t des_ede_cbc_info = {
1031 MBEDTLS_CIPHER_DES_EDE_CBC,
1032 MBEDTLS_MODE_CBC,
1033 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker343a8702011-06-09 14:27:58 +00001034 "DES-EDE-CBC",
Paul Bakker0e342352013-06-24 19:33:02 +02001035 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001036 0,
Paul Bakker0e342352013-06-24 19:33:02 +02001037 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001038 &des_ede_info
1039};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001040#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001041
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001042static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001043 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001044 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001045#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001046 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001047#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001048#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001049 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001050#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001051#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001052 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001053#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001054#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001055 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001056#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001057 des3_set3key_enc_wrap,
1058 des3_set3key_dec_wrap,
1059 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001060 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001061};
1062
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001063static const mbedtls_cipher_info_t des_ede3_ecb_info = {
1064 MBEDTLS_CIPHER_DES_EDE3_ECB,
1065 MBEDTLS_MODE_ECB,
1066 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001067 "DES-EDE3-ECB",
1068 8,
1069 0,
1070 8,
1071 &des_ede3_info
1072};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001073#if defined(MBEDTLS_CIPHER_MODE_CBC)
1074static const mbedtls_cipher_info_t des_ede3_cbc_info = {
1075 MBEDTLS_CIPHER_DES_EDE3_CBC,
1076 MBEDTLS_MODE_CBC,
1077 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker23986e52011-04-24 08:57:21 +00001078 "DES-EDE3-CBC",
1079 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001080 0,
Paul Bakker23986e52011-04-24 08:57:21 +00001081 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001082 &des_ede3_info
Paul Bakker8123e9d2011-01-06 15:37:30 +00001083};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001084#endif /* MBEDTLS_CIPHER_MODE_CBC */
1085#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001086
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001087#if defined(MBEDTLS_BLOWFISH_C)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001088
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001089static int blowfish_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001090 const unsigned char *input, unsigned char *output )
1091{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001092 return mbedtls_blowfish_crypt_ecb( (mbedtls_blowfish_context *) ctx, operation, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001093 output );
Paul Bakker5e0efa72013-09-08 23:04:04 +02001094}
1095
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001096#if defined(MBEDTLS_CIPHER_MODE_CBC)
1097static int blowfish_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001098 size_t length, unsigned char *iv, const unsigned char *input,
1099 unsigned char *output )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001100{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001101 return mbedtls_blowfish_crypt_cbc( (mbedtls_blowfish_context *) ctx, operation, length, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001102 input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001103}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001104#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001105
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001106#if defined(MBEDTLS_CIPHER_MODE_CFB)
1107static int blowfish_crypt_cfb64_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001108 size_t length, size_t *iv_off, unsigned char *iv,
1109 const unsigned char *input, unsigned char *output )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001110{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001111 return mbedtls_blowfish_crypt_cfb64( (mbedtls_blowfish_context *) ctx, operation, length,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001112 iv_off, iv, input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001113}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001114#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001115
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001116#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001117static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
1118 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001119 const unsigned char *input, unsigned char *output )
1120{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001121 return mbedtls_blowfish_crypt_ctr( (mbedtls_blowfish_context *) ctx, length, nc_off,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001122 nonce_counter, stream_block, input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001123}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001124#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001125
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001126static int blowfish_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001127 unsigned int key_bitlen )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001128{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001129 return mbedtls_blowfish_setkey( (mbedtls_blowfish_context *) ctx, key, key_bitlen );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001130}
1131
1132static void * blowfish_ctx_alloc( void )
1133{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001134 mbedtls_blowfish_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +02001135 ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001136
1137 if( ctx == NULL )
1138 return( NULL );
1139
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001140 mbedtls_blowfish_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001141
1142 return( ctx );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001143}
1144
1145static void blowfish_ctx_free( void *ctx )
1146{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001147 mbedtls_blowfish_free( (mbedtls_blowfish_context *) ctx );
1148 mbedtls_free( ctx );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001149}
1150
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001151static const mbedtls_cipher_base_t blowfish_info = {
1152 MBEDTLS_CIPHER_ID_BLOWFISH,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001153 blowfish_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001154#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001155 blowfish_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001156#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001157#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001158 blowfish_crypt_cfb64_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001159#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001160#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001161 blowfish_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001162#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001163#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001164 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001165#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001166 blowfish_setkey_wrap,
1167 blowfish_setkey_wrap,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001168 blowfish_ctx_alloc,
1169 blowfish_ctx_free
1170};
1171
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001172static const mbedtls_cipher_info_t blowfish_ecb_info = {
1173 MBEDTLS_CIPHER_BLOWFISH_ECB,
1174 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001175 128,
1176 "BLOWFISH-ECB",
1177 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001178 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001179 8,
1180 &blowfish_info
1181};
1182
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001183#if defined(MBEDTLS_CIPHER_MODE_CBC)
1184static const mbedtls_cipher_info_t blowfish_cbc_info = {
1185 MBEDTLS_CIPHER_BLOWFISH_CBC,
1186 MBEDTLS_MODE_CBC,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001187 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001188 "BLOWFISH-CBC",
1189 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001190 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001191 8,
1192 &blowfish_info
1193};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001194#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001195
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001196#if defined(MBEDTLS_CIPHER_MODE_CFB)
1197static const mbedtls_cipher_info_t blowfish_cfb64_info = {
1198 MBEDTLS_CIPHER_BLOWFISH_CFB64,
1199 MBEDTLS_MODE_CFB,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001200 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001201 "BLOWFISH-CFB64",
1202 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001203 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001204 8,
1205 &blowfish_info
1206};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001207#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001208
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001209#if defined(MBEDTLS_CIPHER_MODE_CTR)
1210static const mbedtls_cipher_info_t blowfish_ctr_info = {
1211 MBEDTLS_CIPHER_BLOWFISH_CTR,
1212 MBEDTLS_MODE_CTR,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001213 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001214 "BLOWFISH-CTR",
1215 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001216 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001217 8,
1218 &blowfish_info
1219};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001220#endif /* MBEDTLS_CIPHER_MODE_CTR */
1221#endif /* MBEDTLS_BLOWFISH_C */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001222
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001223#if defined(MBEDTLS_ARC4_C)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001224static int arc4_crypt_stream_wrap( void *ctx, size_t length,
1225 const unsigned char *input,
1226 unsigned char *output )
Paul Bakker68884e32013-01-07 18:20:04 +01001227{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001228 return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) );
Paul Bakker68884e32013-01-07 18:20:04 +01001229}
1230
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001231static int arc4_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001232 unsigned int key_bitlen )
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001233{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001234 /* we get key_bitlen in bits, arc4 expects it in bytes */
1235 if( key_bitlen % 8 != 0 )
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001236 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
Manuel Pégourié-Gonnardce411252013-09-04 12:28:37 +02001237
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001238 mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 );
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001239 return( 0 );
1240}
1241
1242static void * arc4_ctx_alloc( void )
1243{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001244 mbedtls_arc4_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +02001245 ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001246
1247 if( ctx == NULL )
1248 return( NULL );
1249
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001250 mbedtls_arc4_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001251
1252 return( ctx );
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001253}
Paul Bakker68884e32013-01-07 18:20:04 +01001254
1255static void arc4_ctx_free( void *ctx )
1256{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001257 mbedtls_arc4_free( (mbedtls_arc4_context *) ctx );
1258 mbedtls_free( ctx );
Paul Bakker68884e32013-01-07 18:20:04 +01001259}
1260
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001261static const mbedtls_cipher_base_t arc4_base_info = {
1262 MBEDTLS_CIPHER_ID_ARC4,
Paul Bakker68884e32013-01-07 18:20:04 +01001263 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001264#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker68884e32013-01-07 18:20:04 +01001265 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001266#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001267#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker68884e32013-01-07 18:20:04 +01001268 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001269#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001270#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001271 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001272#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001273#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001274 arc4_crypt_stream_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001275#endif
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001276 arc4_setkey_wrap,
1277 arc4_setkey_wrap,
Paul Bakker68884e32013-01-07 18:20:04 +01001278 arc4_ctx_alloc,
1279 arc4_ctx_free
1280};
1281
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001282static const mbedtls_cipher_info_t arc4_128_info = {
1283 MBEDTLS_CIPHER_ARC4_128,
1284 MBEDTLS_MODE_STREAM,
Paul Bakker68884e32013-01-07 18:20:04 +01001285 128,
1286 "ARC4-128",
1287 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001288 0,
Paul Bakker68884e32013-01-07 18:20:04 +01001289 1,
1290 &arc4_base_info
1291};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001292#endif /* MBEDTLS_ARC4_C */
Paul Bakker68884e32013-01-07 18:20:04 +01001293
Daniel Kingbd920622016-05-15 19:56:20 -03001294#if defined(MBEDTLS_CHACHA20_C)
1295
1296static int chacha20_setkey_wrap( void *ctx, const unsigned char *key,
1297 unsigned int key_bitlen )
1298{
1299 if( key_bitlen != 256U )
1300 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
1301
1302 if ( 0 != mbedtls_chacha20_setkey( (mbedtls_chacha20_context*)ctx, key ) )
1303 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
1304
1305 return( 0 );
1306}
1307
1308static void * chacha20_ctx_alloc( void )
1309{
1310 mbedtls_chacha20_context *ctx;
1311 ctx = mbedtls_calloc( 1, sizeof( mbedtls_chacha20_context ) );
1312
1313 if( ctx == NULL )
1314 return( NULL );
1315
1316 mbedtls_chacha20_init( ctx );
1317
1318 return( ctx );
1319}
1320
1321static void chacha20_ctx_free( void *ctx )
1322{
1323 mbedtls_chacha20_free( (mbedtls_chacha20_context *) ctx );
1324 mbedtls_free( ctx );
1325}
1326
1327static const mbedtls_cipher_base_t chacha20_base_info = {
1328 MBEDTLS_CIPHER_ID_CHACHA20,
1329 NULL,
1330#if defined(MBEDTLS_CIPHER_MODE_CBC)
1331 NULL,
1332#endif
1333#if defined(MBEDTLS_CIPHER_MODE_CFB)
1334 NULL,
1335#endif
1336#if defined(MBEDTLS_CIPHER_MODE_CTR)
1337 NULL,
1338#endif
1339#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1340 NULL,
1341#endif
1342 chacha20_setkey_wrap,
1343 chacha20_setkey_wrap,
1344 chacha20_ctx_alloc,
1345 chacha20_ctx_free
1346};
1347static const mbedtls_cipher_info_t chacha20_info = {
1348 MBEDTLS_CIPHER_CHACHA20,
1349 MBEDTLS_MODE_NONE,
1350 256,
1351 "CHACHA20",
1352 12,
1353 0,
1354 64,
1355 &chacha20_base_info
1356};
1357#endif /* MBEDTLS_CHACHA20_C */
1358
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001359#if defined(MBEDTLS_CHACHAPOLY_C)
Daniel King8fe47012016-05-17 20:33:28 -03001360
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001361static int chachapoly_setkey_wrap( void *ctx,
1362 const unsigned char *key,
1363 unsigned int key_bitlen )
Daniel King8fe47012016-05-17 20:33:28 -03001364{
1365 if( key_bitlen != 256U )
1366 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
1367
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001368 if ( 0 != mbedtls_chachapoly_setkey( (mbedtls_chachapoly_context*)ctx, key ) )
Daniel King8fe47012016-05-17 20:33:28 -03001369 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
1370
1371 return( 0 );
1372}
1373
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001374static void * chachapoly_ctx_alloc( void )
Daniel King8fe47012016-05-17 20:33:28 -03001375{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001376 mbedtls_chachapoly_context *ctx;
1377 ctx = mbedtls_calloc( 1, sizeof( mbedtls_chachapoly_context ) );
Daniel King8fe47012016-05-17 20:33:28 -03001378
1379 if( ctx == NULL )
1380 return( NULL );
1381
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001382 mbedtls_chachapoly_init( ctx );
Daniel King8fe47012016-05-17 20:33:28 -03001383
1384 return( ctx );
1385}
1386
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001387static void chachapoly_ctx_free( void *ctx )
Daniel King8fe47012016-05-17 20:33:28 -03001388{
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001389 mbedtls_chachapoly_free( (mbedtls_chachapoly_context *) ctx );
Daniel King8fe47012016-05-17 20:33:28 -03001390 mbedtls_free( ctx );
1391}
1392
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001393static const mbedtls_cipher_base_t chachapoly_base_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001394 MBEDTLS_CIPHER_ID_CHACHA20,
1395 NULL,
1396#if defined(MBEDTLS_CIPHER_MODE_CBC)
1397 NULL,
1398#endif
1399#if defined(MBEDTLS_CIPHER_MODE_CFB)
1400 NULL,
1401#endif
1402#if defined(MBEDTLS_CIPHER_MODE_CTR)
1403 NULL,
1404#endif
1405#if defined(MBEDTLS_CIPHER_MODE_STREAM)
1406 NULL,
1407#endif
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001408 chachapoly_setkey_wrap,
1409 chachapoly_setkey_wrap,
1410 chachapoly_ctx_alloc,
1411 chachapoly_ctx_free
Daniel King8fe47012016-05-17 20:33:28 -03001412};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001413static const mbedtls_cipher_info_t chachapoly_info = {
Daniel King8fe47012016-05-17 20:33:28 -03001414 MBEDTLS_CIPHER_CHACHA20_POLY1305,
1415 MBEDTLS_MODE_NONE,
1416 256,
1417 "CHACHA20-POLY1305",
1418 12,
1419 0,
1420 64,
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001421 &chachapoly_base_info
Daniel King8fe47012016-05-17 20:33:28 -03001422};
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001423#endif /* MBEDTLS_CHACHAPOLY_C */
Daniel King8fe47012016-05-17 20:33:28 -03001424
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001425#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001426static int null_crypt_stream( void *ctx, size_t length,
1427 const unsigned char *input,
1428 unsigned char *output )
1429{
1430 ((void) ctx);
1431 memmove( output, input, length );
1432 return( 0 );
1433}
1434
1435static int null_setkey( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001436 unsigned int key_bitlen )
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001437{
1438 ((void) ctx);
1439 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001440 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001441
1442 return( 0 );
1443}
1444
Paul Bakkerfab5c822012-02-06 16:45:10 +00001445static void * null_ctx_alloc( void )
1446{
Manuel Pégourié-Gonnard86bbc7f2014-07-12 02:14:41 +02001447 return( (void *) 1 );
Paul Bakkerfab5c822012-02-06 16:45:10 +00001448}
1449
Paul Bakkerfab5c822012-02-06 16:45:10 +00001450static void null_ctx_free( void *ctx )
1451{
1452 ((void) ctx);
1453}
1454
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001455static const mbedtls_cipher_base_t null_base_info = {
1456 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001457 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001458#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001459 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001460#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001461#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001462 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001463#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001464#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001465 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001466#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001467#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001468 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001469#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001470 null_setkey,
1471 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001472 null_ctx_alloc,
1473 null_ctx_free
1474};
1475
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001476static const mbedtls_cipher_info_t null_cipher_info = {
1477 MBEDTLS_CIPHER_NULL,
1478 MBEDTLS_MODE_STREAM,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001479 0,
1480 "NULL",
Paul Bakker68884e32013-01-07 18:20:04 +01001481 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001482 0,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001483 1,
1484 &null_base_info
1485};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001486#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00001487
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001488const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001489{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001490#if defined(MBEDTLS_AES_C)
1491 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
1492 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
1493 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
1494#if defined(MBEDTLS_CIPHER_MODE_CBC)
1495 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
1496 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
1497 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001498#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001499#if defined(MBEDTLS_CIPHER_MODE_CFB)
1500 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
1501 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
1502 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001503#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001504#if defined(MBEDTLS_CIPHER_MODE_CTR)
1505 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
1506 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
1507 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001508#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001509#if defined(MBEDTLS_GCM_C)
1510 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
1511 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
1512 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001513#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001514#if defined(MBEDTLS_CCM_C)
1515 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
1516 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
1517 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001518#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001519#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001520
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001521#if defined(MBEDTLS_ARC4_C)
1522 { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001523#endif
1524
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001525#if defined(MBEDTLS_BLOWFISH_C)
1526 { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info },
1527#if defined(MBEDTLS_CIPHER_MODE_CBC)
1528 { MBEDTLS_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001529#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001530#if defined(MBEDTLS_CIPHER_MODE_CFB)
1531 { MBEDTLS_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001532#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001533#if defined(MBEDTLS_CIPHER_MODE_CTR)
1534 { MBEDTLS_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001535#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001536#endif /* MBEDTLS_BLOWFISH_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001537
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001538#if defined(MBEDTLS_CAMELLIA_C)
1539 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
1540 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
1541 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
1542#if defined(MBEDTLS_CIPHER_MODE_CBC)
1543 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
1544 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
1545 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001546#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001547#if defined(MBEDTLS_CIPHER_MODE_CFB)
1548 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
1549 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
1550 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001551#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001552#if defined(MBEDTLS_CIPHER_MODE_CTR)
1553 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
1554 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
1555 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001556#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001557#if defined(MBEDTLS_GCM_C)
1558 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
1559 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
1560 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001561#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001562#if defined(MBEDTLS_CCM_C)
1563 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
1564 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
1565 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001566#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001567#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001568
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001569#if defined(MBEDTLS_DES_C)
1570 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
1571 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
1572 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
1573#if defined(MBEDTLS_CIPHER_MODE_CBC)
1574 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
1575 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
1576 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001577#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001578#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001579
Daniel Kingbd920622016-05-15 19:56:20 -03001580#if defined(MBEDTLS_CHACHA20_C)
1581 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
1582#endif
1583
Manuel Pégourié-Gonnarddca3a5d2018-05-07 10:43:27 +02001584#if defined(MBEDTLS_CHACHAPOLY_C)
1585 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
Daniel King8fe47012016-05-17 20:33:28 -03001586#endif
1587
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001588#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
1589 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
1590#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001591
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001592 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001593};
1594
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001595#define NUM_CIPHERS sizeof mbedtls_cipher_definitions / sizeof mbedtls_cipher_definitions[0]
1596int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001597
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001598#endif /* MBEDTLS_CIPHER_C */