blob: 56a935efc80b5dd2cd50a35ac0d60d7bfc79f646 [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
Bence Szépkúti4e9f7122020-06-05 13:02:18 +02009 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
10 *
11 * This file is provided under the Apache License 2.0, or the
12 * GNU General Public License v2.0 or later.
13 *
14 * **********
15 * Apache License 2.0:
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +020016 *
17 * Licensed under the Apache License, Version 2.0 (the "License"); you may
18 * not use this file except in compliance with the License.
19 * You may obtain a copy of the License at
20 *
21 * http://www.apache.org/licenses/LICENSE-2.0
22 *
23 * Unless required by applicable law or agreed to in writing, software
24 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
25 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26 * See the License for the specific language governing permissions and
27 * limitations under the License.
Paul Bakker8123e9d2011-01-06 15:37:30 +000028 *
Bence Szépkúti4e9f7122020-06-05 13:02:18 +020029 * **********
30 *
31 * **********
32 * GNU General Public License v2.0 or later:
33 *
34 * This program is free software; you can redistribute it and/or modify
35 * it under the terms of the GNU General Public License as published by
36 * the Free Software Foundation; either version 2 of the License, or
37 * (at your option) any later version.
38 *
39 * This program is distributed in the hope that it will be useful,
40 * but WITHOUT ANY WARRANTY; without even the implied warranty of
41 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
42 * GNU General Public License for more details.
43 *
44 * You should have received a copy of the GNU General Public License along
45 * with this program; if not, write to the Free Software Foundation, Inc.,
46 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
47 *
48 * **********
49 *
Manuel Pégourié-Gonnardfe446432015-03-06 13:17:10 +000050 * This file is part of mbed TLS (https://tls.mbed.org)
Paul Bakker8123e9d2011-01-06 15:37:30 +000051 */
52
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020053#if !defined(MBEDTLS_CONFIG_FILE)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000054#include "mbedtls/config.h"
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020055#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020056#include MBEDTLS_CONFIG_FILE
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020057#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000058
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059#if defined(MBEDTLS_CIPHER_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +000060
Manuel Pégourié-Gonnard50518f42015-05-26 11:04:15 +020061#include "mbedtls/cipher_internal.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000062
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020063#if defined(MBEDTLS_AES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000064#include "mbedtls/aes.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000065#endif
66
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067#if defined(MBEDTLS_ARC4_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000068#include "mbedtls/arc4.h"
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +020069#endif
70
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020071#if defined(MBEDTLS_CAMELLIA_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000072#include "mbedtls/camellia.h"
Paul Bakkerf6543712012-03-05 14:01:29 +000073#endif
74
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020075#if defined(MBEDTLS_DES_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000076#include "mbedtls/des.h"
Paul Bakker02f61692012-03-15 10:54:25 +000077#endif
Paul Bakker8123e9d2011-01-06 15:37:30 +000078
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020079#if defined(MBEDTLS_BLOWFISH_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000080#include "mbedtls/blowfish.h"
Paul Bakker6132d0a2012-07-04 17:10:40 +000081#endif
82
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020083#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000084#include "mbedtls/gcm.h"
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +020085#endif
86
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020087#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000088#include "mbedtls/ccm.h"
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +020089#endif
90
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020091#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnard0c851ee2015-02-10 12:47:52 +000092#include <string.h>
93#endif
94
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020095#if defined(MBEDTLS_PLATFORM_C)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000096#include "mbedtls/platform.h"
Paul Bakker6e339b52013-07-03 13:37:05 +020097#else
Rich Evans00ab4702015-02-06 13:43:58 +000098#include <stdlib.h>
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +020099#define mbedtls_calloc calloc
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200100#define mbedtls_free free
Paul Bakker6e339b52013-07-03 13:37:05 +0200101#endif
102
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200103#if defined(MBEDTLS_GCM_C)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200104/* shared by all GCM ciphers */
105static void *gcm_ctx_alloc( void )
106{
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200107 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) );
108
109 if( ctx != NULL )
110 mbedtls_gcm_init( (mbedtls_gcm_context *) ctx );
111
112 return( ctx );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200113}
114
115static void gcm_ctx_free( void *ctx )
116{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200117 mbedtls_gcm_free( ctx );
118 mbedtls_free( ctx );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200119}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200120#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200121
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200122#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200123/* shared by all CCM ciphers */
124static void *ccm_ctx_alloc( void )
125{
Manuel Pégourié-Gonnard96fb6852015-06-23 11:39:01 +0200126 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) );
127
128 if( ctx != NULL )
129 mbedtls_ccm_init( (mbedtls_ccm_context *) ctx );
130
131 return( ctx );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200132}
133
134static void ccm_ctx_free( void *ctx )
135{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200136 mbedtls_ccm_free( ctx );
137 mbedtls_free( ctx );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200138}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200139#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200140
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200141#if defined(MBEDTLS_AES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000142
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200143static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200144 const unsigned char *input, unsigned char *output )
145{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200146 return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200147}
148
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200149#if defined(MBEDTLS_CIPHER_MODE_CBC)
150static int aes_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000151 unsigned char *iv, const unsigned char *input, unsigned char *output )
152{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200153 return mbedtls_aes_crypt_cbc( (mbedtls_aes_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200154 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000155}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200156#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000157
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200158#if defined(MBEDTLS_CIPHER_MODE_CFB)
159static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200160 size_t length, size_t *iv_off, unsigned char *iv,
161 const unsigned char *input, unsigned char *output )
Paul Bakker343a8702011-06-09 14:27:58 +0000162{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200163 return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200164 input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000165}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200166#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000167
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200168#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200169static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
170 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker343a8702011-06-09 14:27:58 +0000171 const unsigned char *input, unsigned char *output )
172{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200173 return mbedtls_aes_crypt_ctr( (mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
Paul Bakker343a8702011-06-09 14:27:58 +0000174 stream_block, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000175}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200176#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000177
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200178static int aes_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200179 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000180{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200181 return mbedtls_aes_setkey_dec( (mbedtls_aes_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000182}
183
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200184static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200185 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000186{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200187 return mbedtls_aes_setkey_enc( (mbedtls_aes_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000188}
189
190static void * aes_ctx_alloc( void )
191{
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200192 mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200193
194 if( aes == NULL )
195 return( NULL );
196
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200197 mbedtls_aes_init( aes );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200198
199 return( aes );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000200}
201
202static void aes_ctx_free( void *ctx )
203{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200204 mbedtls_aes_free( (mbedtls_aes_context *) ctx );
205 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000206}
207
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200208static const mbedtls_cipher_base_t aes_info = {
209 MBEDTLS_CIPHER_ID_AES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200210 aes_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200211#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000212 aes_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100213#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200214#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000215 aes_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100216#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200217#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000218 aes_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100219#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200220#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200221 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100222#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000223 aes_setkey_enc_wrap,
224 aes_setkey_dec_wrap,
225 aes_ctx_alloc,
226 aes_ctx_free
227};
228
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200229static const mbedtls_cipher_info_t aes_128_ecb_info = {
230 MBEDTLS_CIPHER_AES_128_ECB,
231 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200232 128,
233 "AES-128-ECB",
Ron Eldorefba4b02017-09-25 18:22:32 +0300234 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200235 0,
236 16,
237 &aes_info
238};
239
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200240static const mbedtls_cipher_info_t aes_192_ecb_info = {
241 MBEDTLS_CIPHER_AES_192_ECB,
242 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200243 192,
244 "AES-192-ECB",
Ron Eldorefba4b02017-09-25 18:22:32 +0300245 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200246 0,
247 16,
248 &aes_info
249};
250
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200251static const mbedtls_cipher_info_t aes_256_ecb_info = {
252 MBEDTLS_CIPHER_AES_256_ECB,
253 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200254 256,
255 "AES-256-ECB",
Ron Eldorefba4b02017-09-25 18:22:32 +0300256 0,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200257 0,
258 16,
259 &aes_info
260};
261
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200262#if defined(MBEDTLS_CIPHER_MODE_CBC)
263static const mbedtls_cipher_info_t aes_128_cbc_info = {
264 MBEDTLS_CIPHER_AES_128_CBC,
265 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000266 128,
267 "AES-128-CBC",
268 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200269 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000270 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000271 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000272};
273
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200274static const mbedtls_cipher_info_t aes_192_cbc_info = {
275 MBEDTLS_CIPHER_AES_192_CBC,
276 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000277 192,
278 "AES-192-CBC",
279 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200280 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000281 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000282 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000283};
284
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200285static const mbedtls_cipher_info_t aes_256_cbc_info = {
286 MBEDTLS_CIPHER_AES_256_CBC,
287 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000288 256,
289 "AES-256-CBC",
290 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200291 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000292 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000293 &aes_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000294};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200295#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000296
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200297#if defined(MBEDTLS_CIPHER_MODE_CFB)
298static const mbedtls_cipher_info_t aes_128_cfb128_info = {
299 MBEDTLS_CIPHER_AES_128_CFB128,
300 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000301 128,
302 "AES-128-CFB128",
303 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200304 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000305 16,
306 &aes_info
307};
308
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200309static const mbedtls_cipher_info_t aes_192_cfb128_info = {
310 MBEDTLS_CIPHER_AES_192_CFB128,
311 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000312 192,
313 "AES-192-CFB128",
314 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200315 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000316 16,
317 &aes_info
318};
319
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200320static const mbedtls_cipher_info_t aes_256_cfb128_info = {
321 MBEDTLS_CIPHER_AES_256_CFB128,
322 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000323 256,
324 "AES-256-CFB128",
325 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200326 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000327 16,
328 &aes_info
329};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200330#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000331
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200332#if defined(MBEDTLS_CIPHER_MODE_CTR)
333static const mbedtls_cipher_info_t aes_128_ctr_info = {
334 MBEDTLS_CIPHER_AES_128_CTR,
335 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000336 128,
337 "AES-128-CTR",
338 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200339 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000340 16,
341 &aes_info
342};
343
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200344static const mbedtls_cipher_info_t aes_192_ctr_info = {
345 MBEDTLS_CIPHER_AES_192_CTR,
346 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000347 192,
348 "AES-192-CTR",
349 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200350 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000351 16,
352 &aes_info
353};
354
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200355static const mbedtls_cipher_info_t aes_256_ctr_info = {
356 MBEDTLS_CIPHER_AES_256_CTR,
357 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000358 256,
359 "AES-256-CTR",
360 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200361 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000362 16,
363 &aes_info
364};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200365#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000366
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200367#if defined(MBEDTLS_GCM_C)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200368static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200369 unsigned int key_bitlen )
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200370{
Manuel Pégourié-Gonnardc34e8dd2015-04-28 21:42:17 +0200371 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200372 key, key_bitlen );
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200373}
374
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200375static const mbedtls_cipher_base_t gcm_aes_info = {
376 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200377 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200378#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200379 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100380#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200381#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200382 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100383#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200384#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200385 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100386#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200387#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Paul Bakker5e0efa72013-09-08 23:04:04 +0200388 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100389#endif
Paul Bakker43aff2a2013-09-09 00:10:27 +0200390 gcm_aes_setkey_wrap,
391 gcm_aes_setkey_wrap,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200392 gcm_ctx_alloc,
393 gcm_ctx_free,
394};
395
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200396static const mbedtls_cipher_info_t aes_128_gcm_info = {
397 MBEDTLS_CIPHER_AES_128_GCM,
398 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100399 128,
400 "AES-128-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200401 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200402 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100403 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200404 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100405};
406
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200407static const mbedtls_cipher_info_t aes_192_gcm_info = {
408 MBEDTLS_CIPHER_AES_192_GCM,
409 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200410 192,
411 "AES-192-GCM",
412 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200413 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard83f3fc02013-09-04 12:07:24 +0200414 16,
415 &gcm_aes_info
416};
417
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200418static const mbedtls_cipher_info_t aes_256_gcm_info = {
419 MBEDTLS_CIPHER_AES_256_GCM,
420 MBEDTLS_MODE_GCM,
Paul Bakker68884e32013-01-07 18:20:04 +0100421 256,
422 "AES-256-GCM",
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200423 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200424 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Paul Bakker68884e32013-01-07 18:20:04 +0100425 16,
Manuel Pégourié-Gonnard07f8fa52013-08-30 18:34:08 +0200426 &gcm_aes_info
Paul Bakker68884e32013-01-07 18:20:04 +0100427};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200428#endif /* MBEDTLS_GCM_C */
Paul Bakker68884e32013-01-07 18:20:04 +0100429
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200430#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200431static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200432 unsigned int key_bitlen )
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200433{
Manuel Pégourié-Gonnard6963ff02015-04-28 18:02:54 +0200434 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200435 key, key_bitlen );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200436}
437
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200438static const mbedtls_cipher_base_t ccm_aes_info = {
439 MBEDTLS_CIPHER_ID_AES,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200440 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200441#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200442 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100443#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200444#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200445 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100446#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200447#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200448 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100449#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200450#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200451 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100452#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200453 ccm_aes_setkey_wrap,
454 ccm_aes_setkey_wrap,
455 ccm_ctx_alloc,
456 ccm_ctx_free,
457};
458
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200459static const mbedtls_cipher_info_t aes_128_ccm_info = {
460 MBEDTLS_CIPHER_AES_128_CCM,
461 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200462 128,
463 "AES-128-CCM",
464 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200465 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200466 16,
467 &ccm_aes_info
468};
469
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200470static const mbedtls_cipher_info_t aes_192_ccm_info = {
471 MBEDTLS_CIPHER_AES_192_CCM,
472 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200473 192,
474 "AES-192-CCM",
475 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200476 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200477 16,
478 &ccm_aes_info
479};
480
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200481static const mbedtls_cipher_info_t aes_256_ccm_info = {
482 MBEDTLS_CIPHER_AES_256_CCM,
483 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200484 256,
485 "AES-256-CCM",
486 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200487 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200488 16,
489 &ccm_aes_info
490};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200491#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200492
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200493#endif /* MBEDTLS_AES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000494
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200495#if defined(MBEDTLS_CAMELLIA_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000496
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200497static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200498 const unsigned char *input, unsigned char *output )
499{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200500 return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200501 output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200502}
503
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200504#if defined(MBEDTLS_CIPHER_MODE_CBC)
505static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200506 size_t length, unsigned char *iv,
507 const unsigned char *input, unsigned char *output )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000508{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200509 return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200510 input, output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000511}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200512#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000513
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200514#if defined(MBEDTLS_CIPHER_MODE_CFB)
515static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200516 size_t length, size_t *iv_off, unsigned char *iv,
517 const unsigned char *input, unsigned char *output )
Paul Bakker343a8702011-06-09 14:27:58 +0000518{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200519 return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200520 iv_off, iv, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000521}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200522#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000523
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200524#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200525static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
526 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker343a8702011-06-09 14:27:58 +0000527 const unsigned char *input, unsigned char *output )
528{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200529 return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200530 nonce_counter, stream_block, input, output );
Paul Bakker343a8702011-06-09 14:27:58 +0000531}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200532#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000533
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200534static int camellia_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200535 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000536{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200537 return mbedtls_camellia_setkey_dec( (mbedtls_camellia_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000538}
539
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200540static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200541 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000542{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200543 return mbedtls_camellia_setkey_enc( (mbedtls_camellia_context *) ctx, key, key_bitlen );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000544}
545
546static void * camellia_ctx_alloc( void )
547{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200548 mbedtls_camellia_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200549 ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200550
551 if( ctx == NULL )
552 return( NULL );
553
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200554 mbedtls_camellia_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200555
556 return( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000557}
558
559static void camellia_ctx_free( void *ctx )
560{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200561 mbedtls_camellia_free( (mbedtls_camellia_context *) ctx );
562 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000563}
564
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200565static const mbedtls_cipher_base_t camellia_info = {
566 MBEDTLS_CIPHER_ID_CAMELLIA,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200567 camellia_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200568#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +0000569 camellia_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100570#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200571#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker343a8702011-06-09 14:27:58 +0000572 camellia_crypt_cfb128_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100573#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200574#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker343a8702011-06-09 14:27:58 +0000575 camellia_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100576#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200577#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200578 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100579#endif
Paul Bakker343a8702011-06-09 14:27:58 +0000580 camellia_setkey_enc_wrap,
581 camellia_setkey_dec_wrap,
582 camellia_ctx_alloc,
583 camellia_ctx_free
584};
585
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200586static const mbedtls_cipher_info_t camellia_128_ecb_info = {
587 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
588 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200589 128,
590 "CAMELLIA-128-ECB",
591 16,
592 0,
593 16,
594 &camellia_info
595};
596
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200597static const mbedtls_cipher_info_t camellia_192_ecb_info = {
598 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
599 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200600 192,
601 "CAMELLIA-192-ECB",
602 16,
603 0,
604 16,
605 &camellia_info
606};
607
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200608static const mbedtls_cipher_info_t camellia_256_ecb_info = {
609 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
610 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200611 256,
612 "CAMELLIA-256-ECB",
613 16,
614 0,
615 16,
616 &camellia_info
617};
618
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200619#if defined(MBEDTLS_CIPHER_MODE_CBC)
620static const mbedtls_cipher_info_t camellia_128_cbc_info = {
621 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
622 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000623 128,
624 "CAMELLIA-128-CBC",
625 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200626 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000627 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000628 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000629};
630
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200631static const mbedtls_cipher_info_t camellia_192_cbc_info = {
632 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
633 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000634 192,
635 "CAMELLIA-192-CBC",
636 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200637 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000638 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000639 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000640};
641
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200642static const mbedtls_cipher_info_t camellia_256_cbc_info = {
643 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
644 MBEDTLS_MODE_CBC,
Paul Bakker23986e52011-04-24 08:57:21 +0000645 256,
646 "CAMELLIA-256-CBC",
647 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200648 0,
Paul Bakker23986e52011-04-24 08:57:21 +0000649 16,
Paul Bakker343a8702011-06-09 14:27:58 +0000650 &camellia_info
Paul Bakker8123e9d2011-01-06 15:37:30 +0000651};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200652#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +0000653
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200654#if defined(MBEDTLS_CIPHER_MODE_CFB)
655static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
656 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
657 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000658 128,
659 "CAMELLIA-128-CFB128",
660 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200661 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000662 16,
663 &camellia_info
664};
665
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200666static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
667 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
668 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000669 192,
670 "CAMELLIA-192-CFB128",
671 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200672 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000673 16,
674 &camellia_info
675};
676
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200677static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
678 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
679 MBEDTLS_MODE_CFB,
Paul Bakker343a8702011-06-09 14:27:58 +0000680 256,
681 "CAMELLIA-256-CFB128",
682 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200683 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000684 16,
685 &camellia_info
686};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200687#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker343a8702011-06-09 14:27:58 +0000688
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200689#if defined(MBEDTLS_CIPHER_MODE_CTR)
690static const mbedtls_cipher_info_t camellia_128_ctr_info = {
691 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
692 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000693 128,
694 "CAMELLIA-128-CTR",
695 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200696 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000697 16,
698 &camellia_info
699};
700
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200701static const mbedtls_cipher_info_t camellia_192_ctr_info = {
702 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
703 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000704 192,
705 "CAMELLIA-192-CTR",
706 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200707 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000708 16,
709 &camellia_info
710};
711
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200712static const mbedtls_cipher_info_t camellia_256_ctr_info = {
713 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
714 MBEDTLS_MODE_CTR,
Paul Bakker343a8702011-06-09 14:27:58 +0000715 256,
716 "CAMELLIA-256-CTR",
717 16,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +0200718 0,
Paul Bakker343a8702011-06-09 14:27:58 +0000719 16,
720 &camellia_info
721};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200722#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker343a8702011-06-09 14:27:58 +0000723
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200724#if defined(MBEDTLS_GCM_C)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200725static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200726 unsigned int key_bitlen )
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200727{
Manuel Pégourié-Gonnardc34e8dd2015-04-28 21:42:17 +0200728 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200729 key, key_bitlen );
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200730}
731
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200732static const mbedtls_cipher_base_t gcm_camellia_info = {
733 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200734 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200735#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200736 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100737#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200738#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200739 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100740#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200741#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200742 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100743#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200744#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200745 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100746#endif
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200747 gcm_camellia_setkey_wrap,
748 gcm_camellia_setkey_wrap,
749 gcm_ctx_alloc,
750 gcm_ctx_free,
751};
752
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200753static const mbedtls_cipher_info_t camellia_128_gcm_info = {
754 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
755 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200756 128,
757 "CAMELLIA-128-GCM",
758 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200759 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200760 16,
761 &gcm_camellia_info
762};
763
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200764static const mbedtls_cipher_info_t camellia_192_gcm_info = {
765 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
766 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200767 192,
768 "CAMELLIA-192-GCM",
769 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200770 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200771 16,
772 &gcm_camellia_info
773};
774
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200775static const mbedtls_cipher_info_t camellia_256_gcm_info = {
776 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
777 MBEDTLS_MODE_GCM,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200778 256,
779 "CAMELLIA-256-GCM",
780 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200781 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200782 16,
783 &gcm_camellia_info
784};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200785#endif /* MBEDTLS_GCM_C */
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +0200786
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200787#if defined(MBEDTLS_CCM_C)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200788static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200789 unsigned int key_bitlen )
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200790{
Manuel Pégourié-Gonnard6963ff02015-04-28 18:02:54 +0200791 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200792 key, key_bitlen );
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200793}
794
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200795static const mbedtls_cipher_base_t ccm_camellia_info = {
796 MBEDTLS_CIPHER_ID_CAMELLIA,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200797 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200798#if defined(MBEDTLS_CIPHER_MODE_CBC)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200799 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100800#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200801#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200802 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100803#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200804#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200805 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100806#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200807#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200808 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100809#endif
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200810 ccm_camellia_setkey_wrap,
811 ccm_camellia_setkey_wrap,
812 ccm_ctx_alloc,
813 ccm_ctx_free,
814};
815
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200816static const mbedtls_cipher_info_t camellia_128_ccm_info = {
817 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
818 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200819 128,
820 "CAMELLIA-128-CCM",
821 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200822 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200823 16,
824 &ccm_camellia_info
825};
826
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200827static const mbedtls_cipher_info_t camellia_192_ccm_info = {
828 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
829 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200830 192,
831 "CAMELLIA-192-CCM",
832 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200833 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200834 16,
835 &ccm_camellia_info
836};
837
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200838static const mbedtls_cipher_info_t camellia_256_ccm_info = {
839 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
840 MBEDTLS_MODE_CCM,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200841 256,
842 "CAMELLIA-256-CCM",
843 12,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200844 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200845 16,
846 &ccm_camellia_info
847};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200848#endif /* MBEDTLS_CCM_C */
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +0200849
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200850#endif /* MBEDTLS_CAMELLIA_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000851
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200852#if defined(MBEDTLS_DES_C)
Paul Bakker8123e9d2011-01-06 15:37:30 +0000853
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200854static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200855 const unsigned char *input, unsigned char *output )
856{
857 ((void) operation);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200858 return mbedtls_des_crypt_ecb( (mbedtls_des_context *) ctx, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200859}
860
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200861static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200862 const unsigned char *input, unsigned char *output )
863{
864 ((void) operation);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200865 return mbedtls_des3_crypt_ecb( (mbedtls_des3_context *) ctx, input, output );
Paul Bakker5e0efa72013-09-08 23:04:04 +0200866}
867
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200868#if defined(MBEDTLS_CIPHER_MODE_CBC)
869static int des_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000870 unsigned char *iv, const unsigned char *input, unsigned char *output )
871{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200872 return mbedtls_des_crypt_cbc( (mbedtls_des_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200873 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000874}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200875#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000876
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200877#if defined(MBEDTLS_CIPHER_MODE_CBC)
878static int des3_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
Paul Bakker8123e9d2011-01-06 15:37:30 +0000879 unsigned char *iv, const unsigned char *input, unsigned char *output )
880{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200881 return mbedtls_des3_crypt_cbc( (mbedtls_des3_context *) ctx, operation, length, iv, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200882 output );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000883}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200884#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker8123e9d2011-01-06 15:37:30 +0000885
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200886static int des_setkey_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200887 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000888{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200889 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000890
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200891 return mbedtls_des_setkey_dec( (mbedtls_des_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000892}
893
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200894static int des_setkey_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200895 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000896{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200897 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000898
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200899 return mbedtls_des_setkey_enc( (mbedtls_des_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000900}
901
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200902static int des3_set2key_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200903 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000904{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200905 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000906
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200907 return mbedtls_des3_set2key_dec( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000908}
909
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200910static int des3_set2key_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200911 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000912{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200913 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000914
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200915 return mbedtls_des3_set2key_enc( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000916}
917
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200918static int des3_set3key_dec_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200919 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000920{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200921 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000922
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200923 return mbedtls_des3_set3key_dec( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000924}
925
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200926static int des3_set3key_enc_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200927 unsigned int key_bitlen )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000928{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +0200929 ((void) key_bitlen);
Paul Bakkerd61e7d92011-01-18 16:17:47 +0000930
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200931 return mbedtls_des3_set3key_enc( (mbedtls_des3_context *) ctx, key );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000932}
933
934static void * des_ctx_alloc( void )
935{
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200936 mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000937
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200938 if( des == NULL )
939 return( NULL );
940
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200941 mbedtls_des_init( des );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200942
943 return( des );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000944}
945
946static void des_ctx_free( void *ctx )
947{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200948 mbedtls_des_free( (mbedtls_des_context *) ctx );
949 mbedtls_free( ctx );
Paul Bakker34617722014-06-13 17:20:13 +0200950}
951
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200952static void * des3_ctx_alloc( void )
953{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200954 mbedtls_des3_context *des3;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +0200955 des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200956
957 if( des3 == NULL )
958 return( NULL );
959
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200960 mbedtls_des3_init( des3 );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200961
962 return( des3 );
963}
964
Paul Bakker34617722014-06-13 17:20:13 +0200965static void des3_ctx_free( void *ctx )
966{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200967 mbedtls_des3_free( (mbedtls_des3_context *) ctx );
968 mbedtls_free( ctx );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000969}
970
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200971static const mbedtls_cipher_base_t des_info = {
972 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200973 des_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200974#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +0000975 des_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100976#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200977#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +0200978 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100979#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200980#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +0200981 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100982#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200983#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +0200984 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +0100985#endif
Paul Bakker23986e52011-04-24 08:57:21 +0000986 des_setkey_enc_wrap,
987 des_setkey_dec_wrap,
988 des_ctx_alloc,
989 des_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +0000990};
991
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200992static const mbedtls_cipher_info_t des_ecb_info = {
993 MBEDTLS_CIPHER_DES_ECB,
994 MBEDTLS_MODE_ECB,
995 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +0200996 "DES-ECB",
997 8,
998 0,
999 8,
1000 &des_info
1001};
1002
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001003#if defined(MBEDTLS_CIPHER_MODE_CBC)
1004static const mbedtls_cipher_info_t des_cbc_info = {
1005 MBEDTLS_CIPHER_DES_CBC,
1006 MBEDTLS_MODE_CBC,
1007 MBEDTLS_KEY_LENGTH_DES,
Paul Bakker343a8702011-06-09 14:27:58 +00001008 "DES-CBC",
1009 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001010 0,
Paul Bakker343a8702011-06-09 14:27:58 +00001011 8,
1012 &des_info
1013};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001014#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001015
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001016static const mbedtls_cipher_base_t des_ede_info = {
1017 MBEDTLS_CIPHER_ID_DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001018 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001019#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker23986e52011-04-24 08:57:21 +00001020 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001021#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001022#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001023 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001024#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001025#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001026 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001027#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001028#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001029 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001030#endif
Paul Bakker23986e52011-04-24 08:57:21 +00001031 des3_set2key_enc_wrap,
1032 des3_set2key_dec_wrap,
1033 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001034 des3_ctx_free
Paul Bakker8123e9d2011-01-06 15:37:30 +00001035};
1036
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001037static const mbedtls_cipher_info_t des_ede_ecb_info = {
1038 MBEDTLS_CIPHER_DES_EDE_ECB,
1039 MBEDTLS_MODE_ECB,
1040 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001041 "DES-EDE-ECB",
1042 8,
1043 0,
1044 8,
1045 &des_ede_info
1046};
1047
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001048#if defined(MBEDTLS_CIPHER_MODE_CBC)
1049static const mbedtls_cipher_info_t des_ede_cbc_info = {
1050 MBEDTLS_CIPHER_DES_EDE_CBC,
1051 MBEDTLS_MODE_CBC,
1052 MBEDTLS_KEY_LENGTH_DES_EDE,
Paul Bakker343a8702011-06-09 14:27:58 +00001053 "DES-EDE-CBC",
Paul Bakker0e342352013-06-24 19:33:02 +02001054 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001055 0,
Paul Bakker0e342352013-06-24 19:33:02 +02001056 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001057 &des_ede_info
1058};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001059#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker343a8702011-06-09 14:27:58 +00001060
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001061static const mbedtls_cipher_base_t des_ede3_info = {
Manuel Pégourié-Gonnard9d515832015-06-02 10:00:04 +01001062 MBEDTLS_CIPHER_ID_3DES,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001063 des3_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001064#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker343a8702011-06-09 14:27:58 +00001065 des3_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001066#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001067#if defined(MBEDTLS_CIPHER_MODE_CFB)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001068 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001069#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001070#if defined(MBEDTLS_CIPHER_MODE_CTR)
Manuel Pégourié-Gonnardb9126162014-06-13 15:06:59 +02001071 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001072#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001073#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001074 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001075#endif
Paul Bakker343a8702011-06-09 14:27:58 +00001076 des3_set3key_enc_wrap,
1077 des3_set3key_dec_wrap,
1078 des3_ctx_alloc,
Paul Bakker34617722014-06-13 17:20:13 +02001079 des3_ctx_free
Paul Bakker343a8702011-06-09 14:27:58 +00001080};
1081
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001082static const mbedtls_cipher_info_t des_ede3_ecb_info = {
1083 MBEDTLS_CIPHER_DES_EDE3_ECB,
1084 MBEDTLS_MODE_ECB,
1085 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001086 "DES-EDE3-ECB",
1087 8,
1088 0,
1089 8,
1090 &des_ede3_info
1091};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001092#if defined(MBEDTLS_CIPHER_MODE_CBC)
1093static const mbedtls_cipher_info_t des_ede3_cbc_info = {
1094 MBEDTLS_CIPHER_DES_EDE3_CBC,
1095 MBEDTLS_MODE_CBC,
1096 MBEDTLS_KEY_LENGTH_DES_EDE3,
Paul Bakker23986e52011-04-24 08:57:21 +00001097 "DES-EDE3-CBC",
1098 8,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001099 0,
Paul Bakker23986e52011-04-24 08:57:21 +00001100 8,
Paul Bakker343a8702011-06-09 14:27:58 +00001101 &des_ede3_info
Paul Bakker8123e9d2011-01-06 15:37:30 +00001102};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001103#endif /* MBEDTLS_CIPHER_MODE_CBC */
1104#endif /* MBEDTLS_DES_C */
Paul Bakker8123e9d2011-01-06 15:37:30 +00001105
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001106#if defined(MBEDTLS_BLOWFISH_C)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001107
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001108static int blowfish_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001109 const unsigned char *input, unsigned char *output )
1110{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001111 return mbedtls_blowfish_crypt_ecb( (mbedtls_blowfish_context *) ctx, operation, input,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001112 output );
Paul Bakker5e0efa72013-09-08 23:04:04 +02001113}
1114
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001115#if defined(MBEDTLS_CIPHER_MODE_CBC)
1116static int blowfish_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001117 size_t length, unsigned char *iv, const unsigned char *input,
1118 unsigned char *output )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001119{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001120 return mbedtls_blowfish_crypt_cbc( (mbedtls_blowfish_context *) ctx, operation, length, iv,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001121 input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001122}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001123#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001124
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001125#if defined(MBEDTLS_CIPHER_MODE_CFB)
1126static int blowfish_crypt_cfb64_wrap( void *ctx, mbedtls_operation_t operation,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001127 size_t length, size_t *iv_off, unsigned char *iv,
1128 const unsigned char *input, unsigned char *output )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001129{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001130 return mbedtls_blowfish_crypt_cfb64( (mbedtls_blowfish_context *) ctx, operation, length,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001131 iv_off, iv, input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001132}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001133#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001134
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001135#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001136static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
1137 unsigned char *nonce_counter, unsigned char *stream_block,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001138 const unsigned char *input, unsigned char *output )
1139{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001140 return mbedtls_blowfish_crypt_ctr( (mbedtls_blowfish_context *) ctx, length, nc_off,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001141 nonce_counter, stream_block, input, output );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001142}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001143#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001144
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +02001145static int blowfish_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001146 unsigned int key_bitlen )
Paul Bakker6132d0a2012-07-04 17:10:40 +00001147{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001148 return mbedtls_blowfish_setkey( (mbedtls_blowfish_context *) ctx, key, key_bitlen );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001149}
1150
1151static void * blowfish_ctx_alloc( void )
1152{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001153 mbedtls_blowfish_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +02001154 ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001155
1156 if( ctx == NULL )
1157 return( NULL );
1158
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001159 mbedtls_blowfish_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001160
1161 return( ctx );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001162}
1163
1164static void blowfish_ctx_free( void *ctx )
1165{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001166 mbedtls_blowfish_free( (mbedtls_blowfish_context *) ctx );
1167 mbedtls_free( ctx );
Paul Bakker6132d0a2012-07-04 17:10:40 +00001168}
1169
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001170static const mbedtls_cipher_base_t blowfish_info = {
1171 MBEDTLS_CIPHER_ID_BLOWFISH,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001172 blowfish_crypt_ecb_wrap,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001173#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001174 blowfish_crypt_cbc_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001175#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001176#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001177 blowfish_crypt_cfb64_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001178#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001179#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker6132d0a2012-07-04 17:10:40 +00001180 blowfish_crypt_ctr_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001181#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001182#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001183 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001184#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001185 blowfish_setkey_wrap,
1186 blowfish_setkey_wrap,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001187 blowfish_ctx_alloc,
1188 blowfish_ctx_free
1189};
1190
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001191static const mbedtls_cipher_info_t blowfish_ecb_info = {
1192 MBEDTLS_CIPHER_BLOWFISH_ECB,
1193 MBEDTLS_MODE_ECB,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001194 128,
1195 "BLOWFISH-ECB",
1196 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001197 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker5e0efa72013-09-08 23:04:04 +02001198 8,
1199 &blowfish_info
1200};
1201
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001202#if defined(MBEDTLS_CIPHER_MODE_CBC)
1203static const mbedtls_cipher_info_t blowfish_cbc_info = {
1204 MBEDTLS_CIPHER_BLOWFISH_CBC,
1205 MBEDTLS_MODE_CBC,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001206 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001207 "BLOWFISH-CBC",
1208 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001209 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001210 8,
1211 &blowfish_info
1212};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001213#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001214
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001215#if defined(MBEDTLS_CIPHER_MODE_CFB)
1216static const mbedtls_cipher_info_t blowfish_cfb64_info = {
1217 MBEDTLS_CIPHER_BLOWFISH_CFB64,
1218 MBEDTLS_MODE_CFB,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001219 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001220 "BLOWFISH-CFB64",
1221 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001222 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001223 8,
1224 &blowfish_info
1225};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001226#endif /* MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001227
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001228#if defined(MBEDTLS_CIPHER_MODE_CTR)
1229static const mbedtls_cipher_info_t blowfish_ctr_info = {
1230 MBEDTLS_CIPHER_BLOWFISH_CTR,
1231 MBEDTLS_MODE_CTR,
Paul Bakkerbfe671f2013-04-07 22:35:44 +02001232 128,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001233 "BLOWFISH-CTR",
1234 8,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001235 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
Paul Bakker6132d0a2012-07-04 17:10:40 +00001236 8,
1237 &blowfish_info
1238};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001239#endif /* MBEDTLS_CIPHER_MODE_CTR */
1240#endif /* MBEDTLS_BLOWFISH_C */
Paul Bakker6132d0a2012-07-04 17:10:40 +00001241
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001242#if defined(MBEDTLS_ARC4_C)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001243static int arc4_crypt_stream_wrap( void *ctx, size_t length,
1244 const unsigned char *input,
1245 unsigned char *output )
Paul Bakker68884e32013-01-07 18:20:04 +01001246{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001247 return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) );
Paul Bakker68884e32013-01-07 18:20:04 +01001248}
1249
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001250static int arc4_setkey_wrap( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001251 unsigned int key_bitlen )
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001252{
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001253 /* we get key_bitlen in bits, arc4 expects it in bytes */
1254 if( key_bitlen % 8 != 0 )
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001255 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
Manuel Pégourié-Gonnardce411252013-09-04 12:28:37 +02001256
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001257 mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 );
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001258 return( 0 );
1259}
1260
1261static void * arc4_ctx_alloc( void )
1262{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001263 mbedtls_arc4_context *ctx;
Manuel Pégourié-Gonnard7551cb92015-05-26 16:04:06 +02001264 ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001265
1266 if( ctx == NULL )
1267 return( NULL );
1268
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001269 mbedtls_arc4_init( ctx );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +02001270
1271 return( ctx );
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001272}
Paul Bakker68884e32013-01-07 18:20:04 +01001273
1274static void arc4_ctx_free( void *ctx )
1275{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001276 mbedtls_arc4_free( (mbedtls_arc4_context *) ctx );
1277 mbedtls_free( ctx );
Paul Bakker68884e32013-01-07 18:20:04 +01001278}
1279
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001280static const mbedtls_cipher_base_t arc4_base_info = {
1281 MBEDTLS_CIPHER_ID_ARC4,
Paul Bakker68884e32013-01-07 18:20:04 +01001282 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001283#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakker68884e32013-01-07 18:20:04 +01001284 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001285#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001286#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakker68884e32013-01-07 18:20:04 +01001287 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001288#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001289#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001290 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001291#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001292#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001293 arc4_crypt_stream_wrap,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001294#endif
Manuel Pégourié-Gonnard37e230c2013-08-28 13:50:42 +02001295 arc4_setkey_wrap,
1296 arc4_setkey_wrap,
Paul Bakker68884e32013-01-07 18:20:04 +01001297 arc4_ctx_alloc,
1298 arc4_ctx_free
1299};
1300
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001301static const mbedtls_cipher_info_t arc4_128_info = {
1302 MBEDTLS_CIPHER_ARC4_128,
1303 MBEDTLS_MODE_STREAM,
Paul Bakker68884e32013-01-07 18:20:04 +01001304 128,
1305 "ARC4-128",
1306 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001307 0,
Paul Bakker68884e32013-01-07 18:20:04 +01001308 1,
1309 &arc4_base_info
1310};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001311#endif /* MBEDTLS_ARC4_C */
Paul Bakker68884e32013-01-07 18:20:04 +01001312
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001313#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001314static int null_crypt_stream( void *ctx, size_t length,
1315 const unsigned char *input,
1316 unsigned char *output )
1317{
1318 ((void) ctx);
1319 memmove( output, input, length );
1320 return( 0 );
1321}
1322
1323static int null_setkey( void *ctx, const unsigned char *key,
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001324 unsigned int key_bitlen )
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001325{
1326 ((void) ctx);
1327 ((void) key);
Manuel Pégourié-Gonnard898e0aa2015-06-18 15:28:12 +02001328 ((void) key_bitlen);
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001329
1330 return( 0 );
1331}
1332
Paul Bakkerfab5c822012-02-06 16:45:10 +00001333static void * null_ctx_alloc( void )
1334{
Manuel Pégourié-Gonnard86bbc7f2014-07-12 02:14:41 +02001335 return( (void *) 1 );
Paul Bakkerfab5c822012-02-06 16:45:10 +00001336}
1337
Paul Bakkerfab5c822012-02-06 16:45:10 +00001338static void null_ctx_free( void *ctx )
1339{
1340 ((void) ctx);
1341}
1342
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001343static const mbedtls_cipher_base_t null_base_info = {
1344 MBEDTLS_CIPHER_ID_NULL,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001345 NULL,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001346#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001347 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001348#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001349#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkerfab5c822012-02-06 16:45:10 +00001350 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001351#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001352#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakker5e0efa72013-09-08 23:04:04 +02001353 NULL,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001354#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001355#if defined(MBEDTLS_CIPHER_MODE_STREAM)
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001356 null_crypt_stream,
Manuel Pégourié-Gonnardb8ca7232014-12-02 10:09:10 +01001357#endif
Manuel Pégourié-Gonnardb5e85882013-08-28 16:36:14 +02001358 null_setkey,
1359 null_setkey,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001360 null_ctx_alloc,
1361 null_ctx_free
1362};
1363
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001364static const mbedtls_cipher_info_t null_cipher_info = {
1365 MBEDTLS_CIPHER_NULL,
1366 MBEDTLS_MODE_STREAM,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001367 0,
1368 "NULL",
Paul Bakker68884e32013-01-07 18:20:04 +01001369 0,
Manuel Pégourié-Gonnarda235b5b2013-09-03 13:25:52 +02001370 0,
Paul Bakkerfab5c822012-02-06 16:45:10 +00001371 1,
1372 &null_base_info
1373};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001374#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
Paul Bakkerfab5c822012-02-06 16:45:10 +00001375
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001376const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001377{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001378#if defined(MBEDTLS_AES_C)
1379 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
1380 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
1381 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
1382#if defined(MBEDTLS_CIPHER_MODE_CBC)
1383 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
1384 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
1385 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001386#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001387#if defined(MBEDTLS_CIPHER_MODE_CFB)
1388 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
1389 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
1390 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001391#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001392#if defined(MBEDTLS_CIPHER_MODE_CTR)
1393 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
1394 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
1395 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001396#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001397#if defined(MBEDTLS_GCM_C)
1398 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
1399 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
1400 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001401#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001402#if defined(MBEDTLS_CCM_C)
1403 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
1404 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
1405 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001406#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001407#endif /* MBEDTLS_AES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001408
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001409#if defined(MBEDTLS_ARC4_C)
1410 { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001411#endif
1412
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001413#if defined(MBEDTLS_BLOWFISH_C)
1414 { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info },
1415#if defined(MBEDTLS_CIPHER_MODE_CBC)
1416 { MBEDTLS_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001417#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001418#if defined(MBEDTLS_CIPHER_MODE_CFB)
1419 { MBEDTLS_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001420#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001421#if defined(MBEDTLS_CIPHER_MODE_CTR)
1422 { MBEDTLS_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001423#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001424#endif /* MBEDTLS_BLOWFISH_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001425
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001426#if defined(MBEDTLS_CAMELLIA_C)
1427 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
1428 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
1429 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
1430#if defined(MBEDTLS_CIPHER_MODE_CBC)
1431 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
1432 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
1433 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001434#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001435#if defined(MBEDTLS_CIPHER_MODE_CFB)
1436 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
1437 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
1438 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_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_CTR)
1441 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
1442 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
1443 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001444#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001445#if defined(MBEDTLS_GCM_C)
1446 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
1447 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
1448 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
Manuel Pégourié-Gonnard87181d12013-10-24 14:02:40 +02001449#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001450#if defined(MBEDTLS_CCM_C)
1451 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
1452 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
1453 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
Manuel Pégourié-Gonnard41936952014-05-13 13:18:17 +02001454#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001455#endif /* MBEDTLS_CAMELLIA_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001456
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001457#if defined(MBEDTLS_DES_C)
1458 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
1459 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
1460 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
1461#if defined(MBEDTLS_CIPHER_MODE_CBC)
1462 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
1463 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
1464 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001465#endif
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001466#endif /* MBEDTLS_DES_C */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001467
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001468#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
1469 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
1470#endif /* MBEDTLS_CIPHER_NULL_CIPHER */
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001471
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001472 { MBEDTLS_CIPHER_NONE, NULL }
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001473};
1474
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001475#define NUM_CIPHERS sizeof mbedtls_cipher_definitions / sizeof mbedtls_cipher_definitions[0]
1476int mbedtls_cipher_supported[NUM_CIPHERS];
Manuel Pégourié-Gonnarddace82f2013-09-18 15:12:07 +02001477
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02001478#endif /* MBEDTLS_CIPHER_C */