BA / SerialCom

Fork of OmniWheels by Gustav Atmel

Committer:
gustavatmel
Date:
Tue May 01 15:47:08 2018 +0000
Revision:
1:9c5af431a1f1
sdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gustavatmel 1:9c5af431a1f1 1 /**
gustavatmel 1:9c5af431a1f1 2 * \file cipher_wrap.c
gustavatmel 1:9c5af431a1f1 3 *
gustavatmel 1:9c5af431a1f1 4 * \brief Generic cipher wrapper for mbed TLS
gustavatmel 1:9c5af431a1f1 5 *
gustavatmel 1:9c5af431a1f1 6 * \author Adriaan de Jong <dejong@fox-it.com>
gustavatmel 1:9c5af431a1f1 7 *
gustavatmel 1:9c5af431a1f1 8 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
gustavatmel 1:9c5af431a1f1 9 * SPDX-License-Identifier: Apache-2.0
gustavatmel 1:9c5af431a1f1 10 *
gustavatmel 1:9c5af431a1f1 11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
gustavatmel 1:9c5af431a1f1 12 * not use this file except in compliance with the License.
gustavatmel 1:9c5af431a1f1 13 * You may obtain a copy of the License at
gustavatmel 1:9c5af431a1f1 14 *
gustavatmel 1:9c5af431a1f1 15 * http://www.apache.org/licenses/LICENSE-2.0
gustavatmel 1:9c5af431a1f1 16 *
gustavatmel 1:9c5af431a1f1 17 * Unless required by applicable law or agreed to in writing, software
gustavatmel 1:9c5af431a1f1 18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
gustavatmel 1:9c5af431a1f1 19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
gustavatmel 1:9c5af431a1f1 20 * See the License for the specific language governing permissions and
gustavatmel 1:9c5af431a1f1 21 * limitations under the License.
gustavatmel 1:9c5af431a1f1 22 *
gustavatmel 1:9c5af431a1f1 23 * This file is part of mbed TLS (https://tls.mbed.org)
gustavatmel 1:9c5af431a1f1 24 */
gustavatmel 1:9c5af431a1f1 25
gustavatmel 1:9c5af431a1f1 26 #if !defined(MBEDTLS_CONFIG_FILE)
gustavatmel 1:9c5af431a1f1 27 #include "mbedtls/config.h"
gustavatmel 1:9c5af431a1f1 28 #else
gustavatmel 1:9c5af431a1f1 29 #include MBEDTLS_CONFIG_FILE
gustavatmel 1:9c5af431a1f1 30 #endif
gustavatmel 1:9c5af431a1f1 31
gustavatmel 1:9c5af431a1f1 32 #if defined(MBEDTLS_CIPHER_C)
gustavatmel 1:9c5af431a1f1 33
gustavatmel 1:9c5af431a1f1 34 #include "mbedtls/cipher_internal.h"
gustavatmel 1:9c5af431a1f1 35
gustavatmel 1:9c5af431a1f1 36 #if defined(MBEDTLS_AES_C)
gustavatmel 1:9c5af431a1f1 37 #include "mbedtls/aes.h"
gustavatmel 1:9c5af431a1f1 38 #endif
gustavatmel 1:9c5af431a1f1 39
gustavatmel 1:9c5af431a1f1 40 #if defined(MBEDTLS_ARC4_C)
gustavatmel 1:9c5af431a1f1 41 #include "mbedtls/arc4.h"
gustavatmel 1:9c5af431a1f1 42 #endif
gustavatmel 1:9c5af431a1f1 43
gustavatmel 1:9c5af431a1f1 44 #if defined(MBEDTLS_CAMELLIA_C)
gustavatmel 1:9c5af431a1f1 45 #include "mbedtls/camellia.h"
gustavatmel 1:9c5af431a1f1 46 #endif
gustavatmel 1:9c5af431a1f1 47
gustavatmel 1:9c5af431a1f1 48 #if defined(MBEDTLS_DES_C)
gustavatmel 1:9c5af431a1f1 49 #include "mbedtls/des.h"
gustavatmel 1:9c5af431a1f1 50 #endif
gustavatmel 1:9c5af431a1f1 51
gustavatmel 1:9c5af431a1f1 52 #if defined(MBEDTLS_BLOWFISH_C)
gustavatmel 1:9c5af431a1f1 53 #include "mbedtls/blowfish.h"
gustavatmel 1:9c5af431a1f1 54 #endif
gustavatmel 1:9c5af431a1f1 55
gustavatmel 1:9c5af431a1f1 56 #if defined(MBEDTLS_GCM_C)
gustavatmel 1:9c5af431a1f1 57 #include "mbedtls/gcm.h"
gustavatmel 1:9c5af431a1f1 58 #endif
gustavatmel 1:9c5af431a1f1 59
gustavatmel 1:9c5af431a1f1 60 #if defined(MBEDTLS_CCM_C)
gustavatmel 1:9c5af431a1f1 61 #include "mbedtls/ccm.h"
gustavatmel 1:9c5af431a1f1 62 #endif
gustavatmel 1:9c5af431a1f1 63
gustavatmel 1:9c5af431a1f1 64 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
gustavatmel 1:9c5af431a1f1 65 #include <string.h>
gustavatmel 1:9c5af431a1f1 66 #endif
gustavatmel 1:9c5af431a1f1 67
gustavatmel 1:9c5af431a1f1 68 #if defined(MBEDTLS_PLATFORM_C)
gustavatmel 1:9c5af431a1f1 69 #include "mbedtls/platform.h"
gustavatmel 1:9c5af431a1f1 70 #else
gustavatmel 1:9c5af431a1f1 71 #include <stdlib.h>
gustavatmel 1:9c5af431a1f1 72 #define mbedtls_calloc calloc
gustavatmel 1:9c5af431a1f1 73 #define mbedtls_free free
gustavatmel 1:9c5af431a1f1 74 #endif
gustavatmel 1:9c5af431a1f1 75
gustavatmel 1:9c5af431a1f1 76 #if defined(MBEDTLS_GCM_C)
gustavatmel 1:9c5af431a1f1 77 /* shared by all GCM ciphers */
gustavatmel 1:9c5af431a1f1 78 static void *gcm_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 79 {
gustavatmel 1:9c5af431a1f1 80 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) );
gustavatmel 1:9c5af431a1f1 81
gustavatmel 1:9c5af431a1f1 82 if( ctx != NULL )
gustavatmel 1:9c5af431a1f1 83 mbedtls_gcm_init( (mbedtls_gcm_context *) ctx );
gustavatmel 1:9c5af431a1f1 84
gustavatmel 1:9c5af431a1f1 85 return( ctx );
gustavatmel 1:9c5af431a1f1 86 }
gustavatmel 1:9c5af431a1f1 87
gustavatmel 1:9c5af431a1f1 88 static void gcm_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 89 {
gustavatmel 1:9c5af431a1f1 90 mbedtls_gcm_free( ctx );
gustavatmel 1:9c5af431a1f1 91 mbedtls_free( ctx );
gustavatmel 1:9c5af431a1f1 92 }
gustavatmel 1:9c5af431a1f1 93 #endif /* MBEDTLS_GCM_C */
gustavatmel 1:9c5af431a1f1 94
gustavatmel 1:9c5af431a1f1 95 #if defined(MBEDTLS_CCM_C)
gustavatmel 1:9c5af431a1f1 96 /* shared by all CCM ciphers */
gustavatmel 1:9c5af431a1f1 97 static void *ccm_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 98 {
gustavatmel 1:9c5af431a1f1 99 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) );
gustavatmel 1:9c5af431a1f1 100
gustavatmel 1:9c5af431a1f1 101 if( ctx != NULL )
gustavatmel 1:9c5af431a1f1 102 mbedtls_ccm_init( (mbedtls_ccm_context *) ctx );
gustavatmel 1:9c5af431a1f1 103
gustavatmel 1:9c5af431a1f1 104 return( ctx );
gustavatmel 1:9c5af431a1f1 105 }
gustavatmel 1:9c5af431a1f1 106
gustavatmel 1:9c5af431a1f1 107 static void ccm_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 108 {
gustavatmel 1:9c5af431a1f1 109 mbedtls_ccm_free( ctx );
gustavatmel 1:9c5af431a1f1 110 mbedtls_free( ctx );
gustavatmel 1:9c5af431a1f1 111 }
gustavatmel 1:9c5af431a1f1 112 #endif /* MBEDTLS_CCM_C */
gustavatmel 1:9c5af431a1f1 113
gustavatmel 1:9c5af431a1f1 114 #if defined(MBEDTLS_AES_C)
gustavatmel 1:9c5af431a1f1 115
gustavatmel 1:9c5af431a1f1 116 static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 117 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 118 {
gustavatmel 1:9c5af431a1f1 119 return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output );
gustavatmel 1:9c5af431a1f1 120 }
gustavatmel 1:9c5af431a1f1 121
gustavatmel 1:9c5af431a1f1 122 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 123 static int aes_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
gustavatmel 1:9c5af431a1f1 124 unsigned char *iv, const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 125 {
gustavatmel 1:9c5af431a1f1 126 return mbedtls_aes_crypt_cbc( (mbedtls_aes_context *) ctx, operation, length, iv, input,
gustavatmel 1:9c5af431a1f1 127 output );
gustavatmel 1:9c5af431a1f1 128 }
gustavatmel 1:9c5af431a1f1 129 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 130
gustavatmel 1:9c5af431a1f1 131 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 132 static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 133 size_t length, size_t *iv_off, unsigned char *iv,
gustavatmel 1:9c5af431a1f1 134 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 135 {
gustavatmel 1:9c5af431a1f1 136 return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
gustavatmel 1:9c5af431a1f1 137 input, output );
gustavatmel 1:9c5af431a1f1 138 }
gustavatmel 1:9c5af431a1f1 139 #endif /* MBEDTLS_CIPHER_MODE_CFB */
gustavatmel 1:9c5af431a1f1 140
gustavatmel 1:9c5af431a1f1 141 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 142 static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
gustavatmel 1:9c5af431a1f1 143 unsigned char *nonce_counter, unsigned char *stream_block,
gustavatmel 1:9c5af431a1f1 144 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 145 {
gustavatmel 1:9c5af431a1f1 146 return mbedtls_aes_crypt_ctr( (mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
gustavatmel 1:9c5af431a1f1 147 stream_block, input, output );
gustavatmel 1:9c5af431a1f1 148 }
gustavatmel 1:9c5af431a1f1 149 #endif /* MBEDTLS_CIPHER_MODE_CTR */
gustavatmel 1:9c5af431a1f1 150
gustavatmel 1:9c5af431a1f1 151 static int aes_setkey_dec_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 152 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 153 {
gustavatmel 1:9c5af431a1f1 154 return mbedtls_aes_setkey_dec( (mbedtls_aes_context *) ctx, key, key_bitlen );
gustavatmel 1:9c5af431a1f1 155 }
gustavatmel 1:9c5af431a1f1 156
gustavatmel 1:9c5af431a1f1 157 static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 158 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 159 {
gustavatmel 1:9c5af431a1f1 160 return mbedtls_aes_setkey_enc( (mbedtls_aes_context *) ctx, key, key_bitlen );
gustavatmel 1:9c5af431a1f1 161 }
gustavatmel 1:9c5af431a1f1 162
gustavatmel 1:9c5af431a1f1 163 static void * aes_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 164 {
gustavatmel 1:9c5af431a1f1 165 mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) );
gustavatmel 1:9c5af431a1f1 166
gustavatmel 1:9c5af431a1f1 167 if( aes == NULL )
gustavatmel 1:9c5af431a1f1 168 return( NULL );
gustavatmel 1:9c5af431a1f1 169
gustavatmel 1:9c5af431a1f1 170 mbedtls_aes_init( aes );
gustavatmel 1:9c5af431a1f1 171
gustavatmel 1:9c5af431a1f1 172 return( aes );
gustavatmel 1:9c5af431a1f1 173 }
gustavatmel 1:9c5af431a1f1 174
gustavatmel 1:9c5af431a1f1 175 static void aes_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 176 {
gustavatmel 1:9c5af431a1f1 177 mbedtls_aes_free( (mbedtls_aes_context *) ctx );
gustavatmel 1:9c5af431a1f1 178 mbedtls_free( ctx );
gustavatmel 1:9c5af431a1f1 179 }
gustavatmel 1:9c5af431a1f1 180
gustavatmel 1:9c5af431a1f1 181 static const mbedtls_cipher_base_t aes_info = {
gustavatmel 1:9c5af431a1f1 182 MBEDTLS_CIPHER_ID_AES,
gustavatmel 1:9c5af431a1f1 183 aes_crypt_ecb_wrap,
gustavatmel 1:9c5af431a1f1 184 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 185 aes_crypt_cbc_wrap,
gustavatmel 1:9c5af431a1f1 186 #endif
gustavatmel 1:9c5af431a1f1 187 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 188 aes_crypt_cfb128_wrap,
gustavatmel 1:9c5af431a1f1 189 #endif
gustavatmel 1:9c5af431a1f1 190 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 191 aes_crypt_ctr_wrap,
gustavatmel 1:9c5af431a1f1 192 #endif
gustavatmel 1:9c5af431a1f1 193 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 194 NULL,
gustavatmel 1:9c5af431a1f1 195 #endif
gustavatmel 1:9c5af431a1f1 196 aes_setkey_enc_wrap,
gustavatmel 1:9c5af431a1f1 197 aes_setkey_dec_wrap,
gustavatmel 1:9c5af431a1f1 198 aes_ctx_alloc,
gustavatmel 1:9c5af431a1f1 199 aes_ctx_free
gustavatmel 1:9c5af431a1f1 200 };
gustavatmel 1:9c5af431a1f1 201
gustavatmel 1:9c5af431a1f1 202 static const mbedtls_cipher_info_t aes_128_ecb_info = {
gustavatmel 1:9c5af431a1f1 203 MBEDTLS_CIPHER_AES_128_ECB,
gustavatmel 1:9c5af431a1f1 204 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 205 128,
gustavatmel 1:9c5af431a1f1 206 "AES-128-ECB",
gustavatmel 1:9c5af431a1f1 207 16,
gustavatmel 1:9c5af431a1f1 208 0,
gustavatmel 1:9c5af431a1f1 209 16,
gustavatmel 1:9c5af431a1f1 210 &aes_info
gustavatmel 1:9c5af431a1f1 211 };
gustavatmel 1:9c5af431a1f1 212
gustavatmel 1:9c5af431a1f1 213 static const mbedtls_cipher_info_t aes_192_ecb_info = {
gustavatmel 1:9c5af431a1f1 214 MBEDTLS_CIPHER_AES_192_ECB,
gustavatmel 1:9c5af431a1f1 215 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 216 192,
gustavatmel 1:9c5af431a1f1 217 "AES-192-ECB",
gustavatmel 1:9c5af431a1f1 218 16,
gustavatmel 1:9c5af431a1f1 219 0,
gustavatmel 1:9c5af431a1f1 220 16,
gustavatmel 1:9c5af431a1f1 221 &aes_info
gustavatmel 1:9c5af431a1f1 222 };
gustavatmel 1:9c5af431a1f1 223
gustavatmel 1:9c5af431a1f1 224 static const mbedtls_cipher_info_t aes_256_ecb_info = {
gustavatmel 1:9c5af431a1f1 225 MBEDTLS_CIPHER_AES_256_ECB,
gustavatmel 1:9c5af431a1f1 226 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 227 256,
gustavatmel 1:9c5af431a1f1 228 "AES-256-ECB",
gustavatmel 1:9c5af431a1f1 229 16,
gustavatmel 1:9c5af431a1f1 230 0,
gustavatmel 1:9c5af431a1f1 231 16,
gustavatmel 1:9c5af431a1f1 232 &aes_info
gustavatmel 1:9c5af431a1f1 233 };
gustavatmel 1:9c5af431a1f1 234
gustavatmel 1:9c5af431a1f1 235 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 236 static const mbedtls_cipher_info_t aes_128_cbc_info = {
gustavatmel 1:9c5af431a1f1 237 MBEDTLS_CIPHER_AES_128_CBC,
gustavatmel 1:9c5af431a1f1 238 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 239 128,
gustavatmel 1:9c5af431a1f1 240 "AES-128-CBC",
gustavatmel 1:9c5af431a1f1 241 16,
gustavatmel 1:9c5af431a1f1 242 0,
gustavatmel 1:9c5af431a1f1 243 16,
gustavatmel 1:9c5af431a1f1 244 &aes_info
gustavatmel 1:9c5af431a1f1 245 };
gustavatmel 1:9c5af431a1f1 246
gustavatmel 1:9c5af431a1f1 247 static const mbedtls_cipher_info_t aes_192_cbc_info = {
gustavatmel 1:9c5af431a1f1 248 MBEDTLS_CIPHER_AES_192_CBC,
gustavatmel 1:9c5af431a1f1 249 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 250 192,
gustavatmel 1:9c5af431a1f1 251 "AES-192-CBC",
gustavatmel 1:9c5af431a1f1 252 16,
gustavatmel 1:9c5af431a1f1 253 0,
gustavatmel 1:9c5af431a1f1 254 16,
gustavatmel 1:9c5af431a1f1 255 &aes_info
gustavatmel 1:9c5af431a1f1 256 };
gustavatmel 1:9c5af431a1f1 257
gustavatmel 1:9c5af431a1f1 258 static const mbedtls_cipher_info_t aes_256_cbc_info = {
gustavatmel 1:9c5af431a1f1 259 MBEDTLS_CIPHER_AES_256_CBC,
gustavatmel 1:9c5af431a1f1 260 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 261 256,
gustavatmel 1:9c5af431a1f1 262 "AES-256-CBC",
gustavatmel 1:9c5af431a1f1 263 16,
gustavatmel 1:9c5af431a1f1 264 0,
gustavatmel 1:9c5af431a1f1 265 16,
gustavatmel 1:9c5af431a1f1 266 &aes_info
gustavatmel 1:9c5af431a1f1 267 };
gustavatmel 1:9c5af431a1f1 268 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 269
gustavatmel 1:9c5af431a1f1 270 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 271 static const mbedtls_cipher_info_t aes_128_cfb128_info = {
gustavatmel 1:9c5af431a1f1 272 MBEDTLS_CIPHER_AES_128_CFB128,
gustavatmel 1:9c5af431a1f1 273 MBEDTLS_MODE_CFB,
gustavatmel 1:9c5af431a1f1 274 128,
gustavatmel 1:9c5af431a1f1 275 "AES-128-CFB128",
gustavatmel 1:9c5af431a1f1 276 16,
gustavatmel 1:9c5af431a1f1 277 0,
gustavatmel 1:9c5af431a1f1 278 16,
gustavatmel 1:9c5af431a1f1 279 &aes_info
gustavatmel 1:9c5af431a1f1 280 };
gustavatmel 1:9c5af431a1f1 281
gustavatmel 1:9c5af431a1f1 282 static const mbedtls_cipher_info_t aes_192_cfb128_info = {
gustavatmel 1:9c5af431a1f1 283 MBEDTLS_CIPHER_AES_192_CFB128,
gustavatmel 1:9c5af431a1f1 284 MBEDTLS_MODE_CFB,
gustavatmel 1:9c5af431a1f1 285 192,
gustavatmel 1:9c5af431a1f1 286 "AES-192-CFB128",
gustavatmel 1:9c5af431a1f1 287 16,
gustavatmel 1:9c5af431a1f1 288 0,
gustavatmel 1:9c5af431a1f1 289 16,
gustavatmel 1:9c5af431a1f1 290 &aes_info
gustavatmel 1:9c5af431a1f1 291 };
gustavatmel 1:9c5af431a1f1 292
gustavatmel 1:9c5af431a1f1 293 static const mbedtls_cipher_info_t aes_256_cfb128_info = {
gustavatmel 1:9c5af431a1f1 294 MBEDTLS_CIPHER_AES_256_CFB128,
gustavatmel 1:9c5af431a1f1 295 MBEDTLS_MODE_CFB,
gustavatmel 1:9c5af431a1f1 296 256,
gustavatmel 1:9c5af431a1f1 297 "AES-256-CFB128",
gustavatmel 1:9c5af431a1f1 298 16,
gustavatmel 1:9c5af431a1f1 299 0,
gustavatmel 1:9c5af431a1f1 300 16,
gustavatmel 1:9c5af431a1f1 301 &aes_info
gustavatmel 1:9c5af431a1f1 302 };
gustavatmel 1:9c5af431a1f1 303 #endif /* MBEDTLS_CIPHER_MODE_CFB */
gustavatmel 1:9c5af431a1f1 304
gustavatmel 1:9c5af431a1f1 305 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 306 static const mbedtls_cipher_info_t aes_128_ctr_info = {
gustavatmel 1:9c5af431a1f1 307 MBEDTLS_CIPHER_AES_128_CTR,
gustavatmel 1:9c5af431a1f1 308 MBEDTLS_MODE_CTR,
gustavatmel 1:9c5af431a1f1 309 128,
gustavatmel 1:9c5af431a1f1 310 "AES-128-CTR",
gustavatmel 1:9c5af431a1f1 311 16,
gustavatmel 1:9c5af431a1f1 312 0,
gustavatmel 1:9c5af431a1f1 313 16,
gustavatmel 1:9c5af431a1f1 314 &aes_info
gustavatmel 1:9c5af431a1f1 315 };
gustavatmel 1:9c5af431a1f1 316
gustavatmel 1:9c5af431a1f1 317 static const mbedtls_cipher_info_t aes_192_ctr_info = {
gustavatmel 1:9c5af431a1f1 318 MBEDTLS_CIPHER_AES_192_CTR,
gustavatmel 1:9c5af431a1f1 319 MBEDTLS_MODE_CTR,
gustavatmel 1:9c5af431a1f1 320 192,
gustavatmel 1:9c5af431a1f1 321 "AES-192-CTR",
gustavatmel 1:9c5af431a1f1 322 16,
gustavatmel 1:9c5af431a1f1 323 0,
gustavatmel 1:9c5af431a1f1 324 16,
gustavatmel 1:9c5af431a1f1 325 &aes_info
gustavatmel 1:9c5af431a1f1 326 };
gustavatmel 1:9c5af431a1f1 327
gustavatmel 1:9c5af431a1f1 328 static const mbedtls_cipher_info_t aes_256_ctr_info = {
gustavatmel 1:9c5af431a1f1 329 MBEDTLS_CIPHER_AES_256_CTR,
gustavatmel 1:9c5af431a1f1 330 MBEDTLS_MODE_CTR,
gustavatmel 1:9c5af431a1f1 331 256,
gustavatmel 1:9c5af431a1f1 332 "AES-256-CTR",
gustavatmel 1:9c5af431a1f1 333 16,
gustavatmel 1:9c5af431a1f1 334 0,
gustavatmel 1:9c5af431a1f1 335 16,
gustavatmel 1:9c5af431a1f1 336 &aes_info
gustavatmel 1:9c5af431a1f1 337 };
gustavatmel 1:9c5af431a1f1 338 #endif /* MBEDTLS_CIPHER_MODE_CTR */
gustavatmel 1:9c5af431a1f1 339
gustavatmel 1:9c5af431a1f1 340 #if defined(MBEDTLS_GCM_C)
gustavatmel 1:9c5af431a1f1 341 static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 342 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 343 {
gustavatmel 1:9c5af431a1f1 344 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
gustavatmel 1:9c5af431a1f1 345 key, key_bitlen );
gustavatmel 1:9c5af431a1f1 346 }
gustavatmel 1:9c5af431a1f1 347
gustavatmel 1:9c5af431a1f1 348 static const mbedtls_cipher_base_t gcm_aes_info = {
gustavatmel 1:9c5af431a1f1 349 MBEDTLS_CIPHER_ID_AES,
gustavatmel 1:9c5af431a1f1 350 NULL,
gustavatmel 1:9c5af431a1f1 351 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 352 NULL,
gustavatmel 1:9c5af431a1f1 353 #endif
gustavatmel 1:9c5af431a1f1 354 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 355 NULL,
gustavatmel 1:9c5af431a1f1 356 #endif
gustavatmel 1:9c5af431a1f1 357 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 358 NULL,
gustavatmel 1:9c5af431a1f1 359 #endif
gustavatmel 1:9c5af431a1f1 360 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 361 NULL,
gustavatmel 1:9c5af431a1f1 362 #endif
gustavatmel 1:9c5af431a1f1 363 gcm_aes_setkey_wrap,
gustavatmel 1:9c5af431a1f1 364 gcm_aes_setkey_wrap,
gustavatmel 1:9c5af431a1f1 365 gcm_ctx_alloc,
gustavatmel 1:9c5af431a1f1 366 gcm_ctx_free,
gustavatmel 1:9c5af431a1f1 367 };
gustavatmel 1:9c5af431a1f1 368
gustavatmel 1:9c5af431a1f1 369 static const mbedtls_cipher_info_t aes_128_gcm_info = {
gustavatmel 1:9c5af431a1f1 370 MBEDTLS_CIPHER_AES_128_GCM,
gustavatmel 1:9c5af431a1f1 371 MBEDTLS_MODE_GCM,
gustavatmel 1:9c5af431a1f1 372 128,
gustavatmel 1:9c5af431a1f1 373 "AES-128-GCM",
gustavatmel 1:9c5af431a1f1 374 12,
gustavatmel 1:9c5af431a1f1 375 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 376 16,
gustavatmel 1:9c5af431a1f1 377 &gcm_aes_info
gustavatmel 1:9c5af431a1f1 378 };
gustavatmel 1:9c5af431a1f1 379
gustavatmel 1:9c5af431a1f1 380 static const mbedtls_cipher_info_t aes_192_gcm_info = {
gustavatmel 1:9c5af431a1f1 381 MBEDTLS_CIPHER_AES_192_GCM,
gustavatmel 1:9c5af431a1f1 382 MBEDTLS_MODE_GCM,
gustavatmel 1:9c5af431a1f1 383 192,
gustavatmel 1:9c5af431a1f1 384 "AES-192-GCM",
gustavatmel 1:9c5af431a1f1 385 12,
gustavatmel 1:9c5af431a1f1 386 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 387 16,
gustavatmel 1:9c5af431a1f1 388 &gcm_aes_info
gustavatmel 1:9c5af431a1f1 389 };
gustavatmel 1:9c5af431a1f1 390
gustavatmel 1:9c5af431a1f1 391 static const mbedtls_cipher_info_t aes_256_gcm_info = {
gustavatmel 1:9c5af431a1f1 392 MBEDTLS_CIPHER_AES_256_GCM,
gustavatmel 1:9c5af431a1f1 393 MBEDTLS_MODE_GCM,
gustavatmel 1:9c5af431a1f1 394 256,
gustavatmel 1:9c5af431a1f1 395 "AES-256-GCM",
gustavatmel 1:9c5af431a1f1 396 12,
gustavatmel 1:9c5af431a1f1 397 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 398 16,
gustavatmel 1:9c5af431a1f1 399 &gcm_aes_info
gustavatmel 1:9c5af431a1f1 400 };
gustavatmel 1:9c5af431a1f1 401 #endif /* MBEDTLS_GCM_C */
gustavatmel 1:9c5af431a1f1 402
gustavatmel 1:9c5af431a1f1 403 #if defined(MBEDTLS_CCM_C)
gustavatmel 1:9c5af431a1f1 404 static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 405 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 406 {
gustavatmel 1:9c5af431a1f1 407 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
gustavatmel 1:9c5af431a1f1 408 key, key_bitlen );
gustavatmel 1:9c5af431a1f1 409 }
gustavatmel 1:9c5af431a1f1 410
gustavatmel 1:9c5af431a1f1 411 static const mbedtls_cipher_base_t ccm_aes_info = {
gustavatmel 1:9c5af431a1f1 412 MBEDTLS_CIPHER_ID_AES,
gustavatmel 1:9c5af431a1f1 413 NULL,
gustavatmel 1:9c5af431a1f1 414 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 415 NULL,
gustavatmel 1:9c5af431a1f1 416 #endif
gustavatmel 1:9c5af431a1f1 417 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 418 NULL,
gustavatmel 1:9c5af431a1f1 419 #endif
gustavatmel 1:9c5af431a1f1 420 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 421 NULL,
gustavatmel 1:9c5af431a1f1 422 #endif
gustavatmel 1:9c5af431a1f1 423 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 424 NULL,
gustavatmel 1:9c5af431a1f1 425 #endif
gustavatmel 1:9c5af431a1f1 426 ccm_aes_setkey_wrap,
gustavatmel 1:9c5af431a1f1 427 ccm_aes_setkey_wrap,
gustavatmel 1:9c5af431a1f1 428 ccm_ctx_alloc,
gustavatmel 1:9c5af431a1f1 429 ccm_ctx_free,
gustavatmel 1:9c5af431a1f1 430 };
gustavatmel 1:9c5af431a1f1 431
gustavatmel 1:9c5af431a1f1 432 static const mbedtls_cipher_info_t aes_128_ccm_info = {
gustavatmel 1:9c5af431a1f1 433 MBEDTLS_CIPHER_AES_128_CCM,
gustavatmel 1:9c5af431a1f1 434 MBEDTLS_MODE_CCM,
gustavatmel 1:9c5af431a1f1 435 128,
gustavatmel 1:9c5af431a1f1 436 "AES-128-CCM",
gustavatmel 1:9c5af431a1f1 437 12,
gustavatmel 1:9c5af431a1f1 438 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 439 16,
gustavatmel 1:9c5af431a1f1 440 &ccm_aes_info
gustavatmel 1:9c5af431a1f1 441 };
gustavatmel 1:9c5af431a1f1 442
gustavatmel 1:9c5af431a1f1 443 static const mbedtls_cipher_info_t aes_192_ccm_info = {
gustavatmel 1:9c5af431a1f1 444 MBEDTLS_CIPHER_AES_192_CCM,
gustavatmel 1:9c5af431a1f1 445 MBEDTLS_MODE_CCM,
gustavatmel 1:9c5af431a1f1 446 192,
gustavatmel 1:9c5af431a1f1 447 "AES-192-CCM",
gustavatmel 1:9c5af431a1f1 448 12,
gustavatmel 1:9c5af431a1f1 449 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 450 16,
gustavatmel 1:9c5af431a1f1 451 &ccm_aes_info
gustavatmel 1:9c5af431a1f1 452 };
gustavatmel 1:9c5af431a1f1 453
gustavatmel 1:9c5af431a1f1 454 static const mbedtls_cipher_info_t aes_256_ccm_info = {
gustavatmel 1:9c5af431a1f1 455 MBEDTLS_CIPHER_AES_256_CCM,
gustavatmel 1:9c5af431a1f1 456 MBEDTLS_MODE_CCM,
gustavatmel 1:9c5af431a1f1 457 256,
gustavatmel 1:9c5af431a1f1 458 "AES-256-CCM",
gustavatmel 1:9c5af431a1f1 459 12,
gustavatmel 1:9c5af431a1f1 460 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 461 16,
gustavatmel 1:9c5af431a1f1 462 &ccm_aes_info
gustavatmel 1:9c5af431a1f1 463 };
gustavatmel 1:9c5af431a1f1 464 #endif /* MBEDTLS_CCM_C */
gustavatmel 1:9c5af431a1f1 465
gustavatmel 1:9c5af431a1f1 466 #endif /* MBEDTLS_AES_C */
gustavatmel 1:9c5af431a1f1 467
gustavatmel 1:9c5af431a1f1 468 #if defined(MBEDTLS_CAMELLIA_C)
gustavatmel 1:9c5af431a1f1 469
gustavatmel 1:9c5af431a1f1 470 static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 471 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 472 {
gustavatmel 1:9c5af431a1f1 473 return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input,
gustavatmel 1:9c5af431a1f1 474 output );
gustavatmel 1:9c5af431a1f1 475 }
gustavatmel 1:9c5af431a1f1 476
gustavatmel 1:9c5af431a1f1 477 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 478 static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 479 size_t length, unsigned char *iv,
gustavatmel 1:9c5af431a1f1 480 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 481 {
gustavatmel 1:9c5af431a1f1 482 return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv,
gustavatmel 1:9c5af431a1f1 483 input, output );
gustavatmel 1:9c5af431a1f1 484 }
gustavatmel 1:9c5af431a1f1 485 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 486
gustavatmel 1:9c5af431a1f1 487 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 488 static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 489 size_t length, size_t *iv_off, unsigned char *iv,
gustavatmel 1:9c5af431a1f1 490 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 491 {
gustavatmel 1:9c5af431a1f1 492 return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length,
gustavatmel 1:9c5af431a1f1 493 iv_off, iv, input, output );
gustavatmel 1:9c5af431a1f1 494 }
gustavatmel 1:9c5af431a1f1 495 #endif /* MBEDTLS_CIPHER_MODE_CFB */
gustavatmel 1:9c5af431a1f1 496
gustavatmel 1:9c5af431a1f1 497 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 498 static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
gustavatmel 1:9c5af431a1f1 499 unsigned char *nonce_counter, unsigned char *stream_block,
gustavatmel 1:9c5af431a1f1 500 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 501 {
gustavatmel 1:9c5af431a1f1 502 return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off,
gustavatmel 1:9c5af431a1f1 503 nonce_counter, stream_block, input, output );
gustavatmel 1:9c5af431a1f1 504 }
gustavatmel 1:9c5af431a1f1 505 #endif /* MBEDTLS_CIPHER_MODE_CTR */
gustavatmel 1:9c5af431a1f1 506
gustavatmel 1:9c5af431a1f1 507 static int camellia_setkey_dec_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 508 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 509 {
gustavatmel 1:9c5af431a1f1 510 return mbedtls_camellia_setkey_dec( (mbedtls_camellia_context *) ctx, key, key_bitlen );
gustavatmel 1:9c5af431a1f1 511 }
gustavatmel 1:9c5af431a1f1 512
gustavatmel 1:9c5af431a1f1 513 static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 514 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 515 {
gustavatmel 1:9c5af431a1f1 516 return mbedtls_camellia_setkey_enc( (mbedtls_camellia_context *) ctx, key, key_bitlen );
gustavatmel 1:9c5af431a1f1 517 }
gustavatmel 1:9c5af431a1f1 518
gustavatmel 1:9c5af431a1f1 519 static void * camellia_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 520 {
gustavatmel 1:9c5af431a1f1 521 mbedtls_camellia_context *ctx;
gustavatmel 1:9c5af431a1f1 522 ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) );
gustavatmel 1:9c5af431a1f1 523
gustavatmel 1:9c5af431a1f1 524 if( ctx == NULL )
gustavatmel 1:9c5af431a1f1 525 return( NULL );
gustavatmel 1:9c5af431a1f1 526
gustavatmel 1:9c5af431a1f1 527 mbedtls_camellia_init( ctx );
gustavatmel 1:9c5af431a1f1 528
gustavatmel 1:9c5af431a1f1 529 return( ctx );
gustavatmel 1:9c5af431a1f1 530 }
gustavatmel 1:9c5af431a1f1 531
gustavatmel 1:9c5af431a1f1 532 static void camellia_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 533 {
gustavatmel 1:9c5af431a1f1 534 mbedtls_camellia_free( (mbedtls_camellia_context *) ctx );
gustavatmel 1:9c5af431a1f1 535 mbedtls_free( ctx );
gustavatmel 1:9c5af431a1f1 536 }
gustavatmel 1:9c5af431a1f1 537
gustavatmel 1:9c5af431a1f1 538 static const mbedtls_cipher_base_t camellia_info = {
gustavatmel 1:9c5af431a1f1 539 MBEDTLS_CIPHER_ID_CAMELLIA,
gustavatmel 1:9c5af431a1f1 540 camellia_crypt_ecb_wrap,
gustavatmel 1:9c5af431a1f1 541 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 542 camellia_crypt_cbc_wrap,
gustavatmel 1:9c5af431a1f1 543 #endif
gustavatmel 1:9c5af431a1f1 544 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 545 camellia_crypt_cfb128_wrap,
gustavatmel 1:9c5af431a1f1 546 #endif
gustavatmel 1:9c5af431a1f1 547 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 548 camellia_crypt_ctr_wrap,
gustavatmel 1:9c5af431a1f1 549 #endif
gustavatmel 1:9c5af431a1f1 550 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 551 NULL,
gustavatmel 1:9c5af431a1f1 552 #endif
gustavatmel 1:9c5af431a1f1 553 camellia_setkey_enc_wrap,
gustavatmel 1:9c5af431a1f1 554 camellia_setkey_dec_wrap,
gustavatmel 1:9c5af431a1f1 555 camellia_ctx_alloc,
gustavatmel 1:9c5af431a1f1 556 camellia_ctx_free
gustavatmel 1:9c5af431a1f1 557 };
gustavatmel 1:9c5af431a1f1 558
gustavatmel 1:9c5af431a1f1 559 static const mbedtls_cipher_info_t camellia_128_ecb_info = {
gustavatmel 1:9c5af431a1f1 560 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
gustavatmel 1:9c5af431a1f1 561 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 562 128,
gustavatmel 1:9c5af431a1f1 563 "CAMELLIA-128-ECB",
gustavatmel 1:9c5af431a1f1 564 16,
gustavatmel 1:9c5af431a1f1 565 0,
gustavatmel 1:9c5af431a1f1 566 16,
gustavatmel 1:9c5af431a1f1 567 &camellia_info
gustavatmel 1:9c5af431a1f1 568 };
gustavatmel 1:9c5af431a1f1 569
gustavatmel 1:9c5af431a1f1 570 static const mbedtls_cipher_info_t camellia_192_ecb_info = {
gustavatmel 1:9c5af431a1f1 571 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
gustavatmel 1:9c5af431a1f1 572 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 573 192,
gustavatmel 1:9c5af431a1f1 574 "CAMELLIA-192-ECB",
gustavatmel 1:9c5af431a1f1 575 16,
gustavatmel 1:9c5af431a1f1 576 0,
gustavatmel 1:9c5af431a1f1 577 16,
gustavatmel 1:9c5af431a1f1 578 &camellia_info
gustavatmel 1:9c5af431a1f1 579 };
gustavatmel 1:9c5af431a1f1 580
gustavatmel 1:9c5af431a1f1 581 static const mbedtls_cipher_info_t camellia_256_ecb_info = {
gustavatmel 1:9c5af431a1f1 582 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
gustavatmel 1:9c5af431a1f1 583 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 584 256,
gustavatmel 1:9c5af431a1f1 585 "CAMELLIA-256-ECB",
gustavatmel 1:9c5af431a1f1 586 16,
gustavatmel 1:9c5af431a1f1 587 0,
gustavatmel 1:9c5af431a1f1 588 16,
gustavatmel 1:9c5af431a1f1 589 &camellia_info
gustavatmel 1:9c5af431a1f1 590 };
gustavatmel 1:9c5af431a1f1 591
gustavatmel 1:9c5af431a1f1 592 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 593 static const mbedtls_cipher_info_t camellia_128_cbc_info = {
gustavatmel 1:9c5af431a1f1 594 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
gustavatmel 1:9c5af431a1f1 595 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 596 128,
gustavatmel 1:9c5af431a1f1 597 "CAMELLIA-128-CBC",
gustavatmel 1:9c5af431a1f1 598 16,
gustavatmel 1:9c5af431a1f1 599 0,
gustavatmel 1:9c5af431a1f1 600 16,
gustavatmel 1:9c5af431a1f1 601 &camellia_info
gustavatmel 1:9c5af431a1f1 602 };
gustavatmel 1:9c5af431a1f1 603
gustavatmel 1:9c5af431a1f1 604 static const mbedtls_cipher_info_t camellia_192_cbc_info = {
gustavatmel 1:9c5af431a1f1 605 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
gustavatmel 1:9c5af431a1f1 606 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 607 192,
gustavatmel 1:9c5af431a1f1 608 "CAMELLIA-192-CBC",
gustavatmel 1:9c5af431a1f1 609 16,
gustavatmel 1:9c5af431a1f1 610 0,
gustavatmel 1:9c5af431a1f1 611 16,
gustavatmel 1:9c5af431a1f1 612 &camellia_info
gustavatmel 1:9c5af431a1f1 613 };
gustavatmel 1:9c5af431a1f1 614
gustavatmel 1:9c5af431a1f1 615 static const mbedtls_cipher_info_t camellia_256_cbc_info = {
gustavatmel 1:9c5af431a1f1 616 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
gustavatmel 1:9c5af431a1f1 617 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 618 256,
gustavatmel 1:9c5af431a1f1 619 "CAMELLIA-256-CBC",
gustavatmel 1:9c5af431a1f1 620 16,
gustavatmel 1:9c5af431a1f1 621 0,
gustavatmel 1:9c5af431a1f1 622 16,
gustavatmel 1:9c5af431a1f1 623 &camellia_info
gustavatmel 1:9c5af431a1f1 624 };
gustavatmel 1:9c5af431a1f1 625 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 626
gustavatmel 1:9c5af431a1f1 627 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 628 static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
gustavatmel 1:9c5af431a1f1 629 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
gustavatmel 1:9c5af431a1f1 630 MBEDTLS_MODE_CFB,
gustavatmel 1:9c5af431a1f1 631 128,
gustavatmel 1:9c5af431a1f1 632 "CAMELLIA-128-CFB128",
gustavatmel 1:9c5af431a1f1 633 16,
gustavatmel 1:9c5af431a1f1 634 0,
gustavatmel 1:9c5af431a1f1 635 16,
gustavatmel 1:9c5af431a1f1 636 &camellia_info
gustavatmel 1:9c5af431a1f1 637 };
gustavatmel 1:9c5af431a1f1 638
gustavatmel 1:9c5af431a1f1 639 static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
gustavatmel 1:9c5af431a1f1 640 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
gustavatmel 1:9c5af431a1f1 641 MBEDTLS_MODE_CFB,
gustavatmel 1:9c5af431a1f1 642 192,
gustavatmel 1:9c5af431a1f1 643 "CAMELLIA-192-CFB128",
gustavatmel 1:9c5af431a1f1 644 16,
gustavatmel 1:9c5af431a1f1 645 0,
gustavatmel 1:9c5af431a1f1 646 16,
gustavatmel 1:9c5af431a1f1 647 &camellia_info
gustavatmel 1:9c5af431a1f1 648 };
gustavatmel 1:9c5af431a1f1 649
gustavatmel 1:9c5af431a1f1 650 static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
gustavatmel 1:9c5af431a1f1 651 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
gustavatmel 1:9c5af431a1f1 652 MBEDTLS_MODE_CFB,
gustavatmel 1:9c5af431a1f1 653 256,
gustavatmel 1:9c5af431a1f1 654 "CAMELLIA-256-CFB128",
gustavatmel 1:9c5af431a1f1 655 16,
gustavatmel 1:9c5af431a1f1 656 0,
gustavatmel 1:9c5af431a1f1 657 16,
gustavatmel 1:9c5af431a1f1 658 &camellia_info
gustavatmel 1:9c5af431a1f1 659 };
gustavatmel 1:9c5af431a1f1 660 #endif /* MBEDTLS_CIPHER_MODE_CFB */
gustavatmel 1:9c5af431a1f1 661
gustavatmel 1:9c5af431a1f1 662 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 663 static const mbedtls_cipher_info_t camellia_128_ctr_info = {
gustavatmel 1:9c5af431a1f1 664 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
gustavatmel 1:9c5af431a1f1 665 MBEDTLS_MODE_CTR,
gustavatmel 1:9c5af431a1f1 666 128,
gustavatmel 1:9c5af431a1f1 667 "CAMELLIA-128-CTR",
gustavatmel 1:9c5af431a1f1 668 16,
gustavatmel 1:9c5af431a1f1 669 0,
gustavatmel 1:9c5af431a1f1 670 16,
gustavatmel 1:9c5af431a1f1 671 &camellia_info
gustavatmel 1:9c5af431a1f1 672 };
gustavatmel 1:9c5af431a1f1 673
gustavatmel 1:9c5af431a1f1 674 static const mbedtls_cipher_info_t camellia_192_ctr_info = {
gustavatmel 1:9c5af431a1f1 675 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
gustavatmel 1:9c5af431a1f1 676 MBEDTLS_MODE_CTR,
gustavatmel 1:9c5af431a1f1 677 192,
gustavatmel 1:9c5af431a1f1 678 "CAMELLIA-192-CTR",
gustavatmel 1:9c5af431a1f1 679 16,
gustavatmel 1:9c5af431a1f1 680 0,
gustavatmel 1:9c5af431a1f1 681 16,
gustavatmel 1:9c5af431a1f1 682 &camellia_info
gustavatmel 1:9c5af431a1f1 683 };
gustavatmel 1:9c5af431a1f1 684
gustavatmel 1:9c5af431a1f1 685 static const mbedtls_cipher_info_t camellia_256_ctr_info = {
gustavatmel 1:9c5af431a1f1 686 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
gustavatmel 1:9c5af431a1f1 687 MBEDTLS_MODE_CTR,
gustavatmel 1:9c5af431a1f1 688 256,
gustavatmel 1:9c5af431a1f1 689 "CAMELLIA-256-CTR",
gustavatmel 1:9c5af431a1f1 690 16,
gustavatmel 1:9c5af431a1f1 691 0,
gustavatmel 1:9c5af431a1f1 692 16,
gustavatmel 1:9c5af431a1f1 693 &camellia_info
gustavatmel 1:9c5af431a1f1 694 };
gustavatmel 1:9c5af431a1f1 695 #endif /* MBEDTLS_CIPHER_MODE_CTR */
gustavatmel 1:9c5af431a1f1 696
gustavatmel 1:9c5af431a1f1 697 #if defined(MBEDTLS_GCM_C)
gustavatmel 1:9c5af431a1f1 698 static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 699 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 700 {
gustavatmel 1:9c5af431a1f1 701 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
gustavatmel 1:9c5af431a1f1 702 key, key_bitlen );
gustavatmel 1:9c5af431a1f1 703 }
gustavatmel 1:9c5af431a1f1 704
gustavatmel 1:9c5af431a1f1 705 static const mbedtls_cipher_base_t gcm_camellia_info = {
gustavatmel 1:9c5af431a1f1 706 MBEDTLS_CIPHER_ID_CAMELLIA,
gustavatmel 1:9c5af431a1f1 707 NULL,
gustavatmel 1:9c5af431a1f1 708 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 709 NULL,
gustavatmel 1:9c5af431a1f1 710 #endif
gustavatmel 1:9c5af431a1f1 711 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 712 NULL,
gustavatmel 1:9c5af431a1f1 713 #endif
gustavatmel 1:9c5af431a1f1 714 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 715 NULL,
gustavatmel 1:9c5af431a1f1 716 #endif
gustavatmel 1:9c5af431a1f1 717 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 718 NULL,
gustavatmel 1:9c5af431a1f1 719 #endif
gustavatmel 1:9c5af431a1f1 720 gcm_camellia_setkey_wrap,
gustavatmel 1:9c5af431a1f1 721 gcm_camellia_setkey_wrap,
gustavatmel 1:9c5af431a1f1 722 gcm_ctx_alloc,
gustavatmel 1:9c5af431a1f1 723 gcm_ctx_free,
gustavatmel 1:9c5af431a1f1 724 };
gustavatmel 1:9c5af431a1f1 725
gustavatmel 1:9c5af431a1f1 726 static const mbedtls_cipher_info_t camellia_128_gcm_info = {
gustavatmel 1:9c5af431a1f1 727 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
gustavatmel 1:9c5af431a1f1 728 MBEDTLS_MODE_GCM,
gustavatmel 1:9c5af431a1f1 729 128,
gustavatmel 1:9c5af431a1f1 730 "CAMELLIA-128-GCM",
gustavatmel 1:9c5af431a1f1 731 12,
gustavatmel 1:9c5af431a1f1 732 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 733 16,
gustavatmel 1:9c5af431a1f1 734 &gcm_camellia_info
gustavatmel 1:9c5af431a1f1 735 };
gustavatmel 1:9c5af431a1f1 736
gustavatmel 1:9c5af431a1f1 737 static const mbedtls_cipher_info_t camellia_192_gcm_info = {
gustavatmel 1:9c5af431a1f1 738 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
gustavatmel 1:9c5af431a1f1 739 MBEDTLS_MODE_GCM,
gustavatmel 1:9c5af431a1f1 740 192,
gustavatmel 1:9c5af431a1f1 741 "CAMELLIA-192-GCM",
gustavatmel 1:9c5af431a1f1 742 12,
gustavatmel 1:9c5af431a1f1 743 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 744 16,
gustavatmel 1:9c5af431a1f1 745 &gcm_camellia_info
gustavatmel 1:9c5af431a1f1 746 };
gustavatmel 1:9c5af431a1f1 747
gustavatmel 1:9c5af431a1f1 748 static const mbedtls_cipher_info_t camellia_256_gcm_info = {
gustavatmel 1:9c5af431a1f1 749 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
gustavatmel 1:9c5af431a1f1 750 MBEDTLS_MODE_GCM,
gustavatmel 1:9c5af431a1f1 751 256,
gustavatmel 1:9c5af431a1f1 752 "CAMELLIA-256-GCM",
gustavatmel 1:9c5af431a1f1 753 12,
gustavatmel 1:9c5af431a1f1 754 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 755 16,
gustavatmel 1:9c5af431a1f1 756 &gcm_camellia_info
gustavatmel 1:9c5af431a1f1 757 };
gustavatmel 1:9c5af431a1f1 758 #endif /* MBEDTLS_GCM_C */
gustavatmel 1:9c5af431a1f1 759
gustavatmel 1:9c5af431a1f1 760 #if defined(MBEDTLS_CCM_C)
gustavatmel 1:9c5af431a1f1 761 static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 762 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 763 {
gustavatmel 1:9c5af431a1f1 764 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
gustavatmel 1:9c5af431a1f1 765 key, key_bitlen );
gustavatmel 1:9c5af431a1f1 766 }
gustavatmel 1:9c5af431a1f1 767
gustavatmel 1:9c5af431a1f1 768 static const mbedtls_cipher_base_t ccm_camellia_info = {
gustavatmel 1:9c5af431a1f1 769 MBEDTLS_CIPHER_ID_CAMELLIA,
gustavatmel 1:9c5af431a1f1 770 NULL,
gustavatmel 1:9c5af431a1f1 771 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 772 NULL,
gustavatmel 1:9c5af431a1f1 773 #endif
gustavatmel 1:9c5af431a1f1 774 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 775 NULL,
gustavatmel 1:9c5af431a1f1 776 #endif
gustavatmel 1:9c5af431a1f1 777 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 778 NULL,
gustavatmel 1:9c5af431a1f1 779 #endif
gustavatmel 1:9c5af431a1f1 780 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 781 NULL,
gustavatmel 1:9c5af431a1f1 782 #endif
gustavatmel 1:9c5af431a1f1 783 ccm_camellia_setkey_wrap,
gustavatmel 1:9c5af431a1f1 784 ccm_camellia_setkey_wrap,
gustavatmel 1:9c5af431a1f1 785 ccm_ctx_alloc,
gustavatmel 1:9c5af431a1f1 786 ccm_ctx_free,
gustavatmel 1:9c5af431a1f1 787 };
gustavatmel 1:9c5af431a1f1 788
gustavatmel 1:9c5af431a1f1 789 static const mbedtls_cipher_info_t camellia_128_ccm_info = {
gustavatmel 1:9c5af431a1f1 790 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
gustavatmel 1:9c5af431a1f1 791 MBEDTLS_MODE_CCM,
gustavatmel 1:9c5af431a1f1 792 128,
gustavatmel 1:9c5af431a1f1 793 "CAMELLIA-128-CCM",
gustavatmel 1:9c5af431a1f1 794 12,
gustavatmel 1:9c5af431a1f1 795 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 796 16,
gustavatmel 1:9c5af431a1f1 797 &ccm_camellia_info
gustavatmel 1:9c5af431a1f1 798 };
gustavatmel 1:9c5af431a1f1 799
gustavatmel 1:9c5af431a1f1 800 static const mbedtls_cipher_info_t camellia_192_ccm_info = {
gustavatmel 1:9c5af431a1f1 801 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
gustavatmel 1:9c5af431a1f1 802 MBEDTLS_MODE_CCM,
gustavatmel 1:9c5af431a1f1 803 192,
gustavatmel 1:9c5af431a1f1 804 "CAMELLIA-192-CCM",
gustavatmel 1:9c5af431a1f1 805 12,
gustavatmel 1:9c5af431a1f1 806 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 807 16,
gustavatmel 1:9c5af431a1f1 808 &ccm_camellia_info
gustavatmel 1:9c5af431a1f1 809 };
gustavatmel 1:9c5af431a1f1 810
gustavatmel 1:9c5af431a1f1 811 static const mbedtls_cipher_info_t camellia_256_ccm_info = {
gustavatmel 1:9c5af431a1f1 812 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
gustavatmel 1:9c5af431a1f1 813 MBEDTLS_MODE_CCM,
gustavatmel 1:9c5af431a1f1 814 256,
gustavatmel 1:9c5af431a1f1 815 "CAMELLIA-256-CCM",
gustavatmel 1:9c5af431a1f1 816 12,
gustavatmel 1:9c5af431a1f1 817 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
gustavatmel 1:9c5af431a1f1 818 16,
gustavatmel 1:9c5af431a1f1 819 &ccm_camellia_info
gustavatmel 1:9c5af431a1f1 820 };
gustavatmel 1:9c5af431a1f1 821 #endif /* MBEDTLS_CCM_C */
gustavatmel 1:9c5af431a1f1 822
gustavatmel 1:9c5af431a1f1 823 #endif /* MBEDTLS_CAMELLIA_C */
gustavatmel 1:9c5af431a1f1 824
gustavatmel 1:9c5af431a1f1 825 #if defined(MBEDTLS_DES_C)
gustavatmel 1:9c5af431a1f1 826
gustavatmel 1:9c5af431a1f1 827 static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 828 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 829 {
gustavatmel 1:9c5af431a1f1 830 ((void) operation);
gustavatmel 1:9c5af431a1f1 831 return mbedtls_des_crypt_ecb( (mbedtls_des_context *) ctx, input, output );
gustavatmel 1:9c5af431a1f1 832 }
gustavatmel 1:9c5af431a1f1 833
gustavatmel 1:9c5af431a1f1 834 static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 835 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 836 {
gustavatmel 1:9c5af431a1f1 837 ((void) operation);
gustavatmel 1:9c5af431a1f1 838 return mbedtls_des3_crypt_ecb( (mbedtls_des3_context *) ctx, input, output );
gustavatmel 1:9c5af431a1f1 839 }
gustavatmel 1:9c5af431a1f1 840
gustavatmel 1:9c5af431a1f1 841 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 842 static int des_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
gustavatmel 1:9c5af431a1f1 843 unsigned char *iv, const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 844 {
gustavatmel 1:9c5af431a1f1 845 return mbedtls_des_crypt_cbc( (mbedtls_des_context *) ctx, operation, length, iv, input,
gustavatmel 1:9c5af431a1f1 846 output );
gustavatmel 1:9c5af431a1f1 847 }
gustavatmel 1:9c5af431a1f1 848 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 849
gustavatmel 1:9c5af431a1f1 850 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 851 static int des3_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
gustavatmel 1:9c5af431a1f1 852 unsigned char *iv, const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 853 {
gustavatmel 1:9c5af431a1f1 854 return mbedtls_des3_crypt_cbc( (mbedtls_des3_context *) ctx, operation, length, iv, input,
gustavatmel 1:9c5af431a1f1 855 output );
gustavatmel 1:9c5af431a1f1 856 }
gustavatmel 1:9c5af431a1f1 857 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 858
gustavatmel 1:9c5af431a1f1 859 static int des_setkey_dec_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 860 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 861 {
gustavatmel 1:9c5af431a1f1 862 ((void) key_bitlen);
gustavatmel 1:9c5af431a1f1 863
gustavatmel 1:9c5af431a1f1 864 return mbedtls_des_setkey_dec( (mbedtls_des_context *) ctx, key );
gustavatmel 1:9c5af431a1f1 865 }
gustavatmel 1:9c5af431a1f1 866
gustavatmel 1:9c5af431a1f1 867 static int des_setkey_enc_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 868 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 869 {
gustavatmel 1:9c5af431a1f1 870 ((void) key_bitlen);
gustavatmel 1:9c5af431a1f1 871
gustavatmel 1:9c5af431a1f1 872 return mbedtls_des_setkey_enc( (mbedtls_des_context *) ctx, key );
gustavatmel 1:9c5af431a1f1 873 }
gustavatmel 1:9c5af431a1f1 874
gustavatmel 1:9c5af431a1f1 875 static int des3_set2key_dec_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 876 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 877 {
gustavatmel 1:9c5af431a1f1 878 ((void) key_bitlen);
gustavatmel 1:9c5af431a1f1 879
gustavatmel 1:9c5af431a1f1 880 return mbedtls_des3_set2key_dec( (mbedtls_des3_context *) ctx, key );
gustavatmel 1:9c5af431a1f1 881 }
gustavatmel 1:9c5af431a1f1 882
gustavatmel 1:9c5af431a1f1 883 static int des3_set2key_enc_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 884 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 885 {
gustavatmel 1:9c5af431a1f1 886 ((void) key_bitlen);
gustavatmel 1:9c5af431a1f1 887
gustavatmel 1:9c5af431a1f1 888 return mbedtls_des3_set2key_enc( (mbedtls_des3_context *) ctx, key );
gustavatmel 1:9c5af431a1f1 889 }
gustavatmel 1:9c5af431a1f1 890
gustavatmel 1:9c5af431a1f1 891 static int des3_set3key_dec_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 892 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 893 {
gustavatmel 1:9c5af431a1f1 894 ((void) key_bitlen);
gustavatmel 1:9c5af431a1f1 895
gustavatmel 1:9c5af431a1f1 896 return mbedtls_des3_set3key_dec( (mbedtls_des3_context *) ctx, key );
gustavatmel 1:9c5af431a1f1 897 }
gustavatmel 1:9c5af431a1f1 898
gustavatmel 1:9c5af431a1f1 899 static int des3_set3key_enc_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 900 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 901 {
gustavatmel 1:9c5af431a1f1 902 ((void) key_bitlen);
gustavatmel 1:9c5af431a1f1 903
gustavatmel 1:9c5af431a1f1 904 return mbedtls_des3_set3key_enc( (mbedtls_des3_context *) ctx, key );
gustavatmel 1:9c5af431a1f1 905 }
gustavatmel 1:9c5af431a1f1 906
gustavatmel 1:9c5af431a1f1 907 static void * des_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 908 {
gustavatmel 1:9c5af431a1f1 909 mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) );
gustavatmel 1:9c5af431a1f1 910
gustavatmel 1:9c5af431a1f1 911 if( des == NULL )
gustavatmel 1:9c5af431a1f1 912 return( NULL );
gustavatmel 1:9c5af431a1f1 913
gustavatmel 1:9c5af431a1f1 914 mbedtls_des_init( des );
gustavatmel 1:9c5af431a1f1 915
gustavatmel 1:9c5af431a1f1 916 return( des );
gustavatmel 1:9c5af431a1f1 917 }
gustavatmel 1:9c5af431a1f1 918
gustavatmel 1:9c5af431a1f1 919 static void des_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 920 {
gustavatmel 1:9c5af431a1f1 921 mbedtls_des_free( (mbedtls_des_context *) ctx );
gustavatmel 1:9c5af431a1f1 922 mbedtls_free( ctx );
gustavatmel 1:9c5af431a1f1 923 }
gustavatmel 1:9c5af431a1f1 924
gustavatmel 1:9c5af431a1f1 925 static void * des3_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 926 {
gustavatmel 1:9c5af431a1f1 927 mbedtls_des3_context *des3;
gustavatmel 1:9c5af431a1f1 928 des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) );
gustavatmel 1:9c5af431a1f1 929
gustavatmel 1:9c5af431a1f1 930 if( des3 == NULL )
gustavatmel 1:9c5af431a1f1 931 return( NULL );
gustavatmel 1:9c5af431a1f1 932
gustavatmel 1:9c5af431a1f1 933 mbedtls_des3_init( des3 );
gustavatmel 1:9c5af431a1f1 934
gustavatmel 1:9c5af431a1f1 935 return( des3 );
gustavatmel 1:9c5af431a1f1 936 }
gustavatmel 1:9c5af431a1f1 937
gustavatmel 1:9c5af431a1f1 938 static void des3_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 939 {
gustavatmel 1:9c5af431a1f1 940 mbedtls_des3_free( (mbedtls_des3_context *) ctx );
gustavatmel 1:9c5af431a1f1 941 mbedtls_free( ctx );
gustavatmel 1:9c5af431a1f1 942 }
gustavatmel 1:9c5af431a1f1 943
gustavatmel 1:9c5af431a1f1 944 static const mbedtls_cipher_base_t des_info = {
gustavatmel 1:9c5af431a1f1 945 MBEDTLS_CIPHER_ID_DES,
gustavatmel 1:9c5af431a1f1 946 des_crypt_ecb_wrap,
gustavatmel 1:9c5af431a1f1 947 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 948 des_crypt_cbc_wrap,
gustavatmel 1:9c5af431a1f1 949 #endif
gustavatmel 1:9c5af431a1f1 950 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 951 NULL,
gustavatmel 1:9c5af431a1f1 952 #endif
gustavatmel 1:9c5af431a1f1 953 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 954 NULL,
gustavatmel 1:9c5af431a1f1 955 #endif
gustavatmel 1:9c5af431a1f1 956 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 957 NULL,
gustavatmel 1:9c5af431a1f1 958 #endif
gustavatmel 1:9c5af431a1f1 959 des_setkey_enc_wrap,
gustavatmel 1:9c5af431a1f1 960 des_setkey_dec_wrap,
gustavatmel 1:9c5af431a1f1 961 des_ctx_alloc,
gustavatmel 1:9c5af431a1f1 962 des_ctx_free
gustavatmel 1:9c5af431a1f1 963 };
gustavatmel 1:9c5af431a1f1 964
gustavatmel 1:9c5af431a1f1 965 static const mbedtls_cipher_info_t des_ecb_info = {
gustavatmel 1:9c5af431a1f1 966 MBEDTLS_CIPHER_DES_ECB,
gustavatmel 1:9c5af431a1f1 967 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 968 MBEDTLS_KEY_LENGTH_DES,
gustavatmel 1:9c5af431a1f1 969 "DES-ECB",
gustavatmel 1:9c5af431a1f1 970 8,
gustavatmel 1:9c5af431a1f1 971 0,
gustavatmel 1:9c5af431a1f1 972 8,
gustavatmel 1:9c5af431a1f1 973 &des_info
gustavatmel 1:9c5af431a1f1 974 };
gustavatmel 1:9c5af431a1f1 975
gustavatmel 1:9c5af431a1f1 976 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 977 static const mbedtls_cipher_info_t des_cbc_info = {
gustavatmel 1:9c5af431a1f1 978 MBEDTLS_CIPHER_DES_CBC,
gustavatmel 1:9c5af431a1f1 979 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 980 MBEDTLS_KEY_LENGTH_DES,
gustavatmel 1:9c5af431a1f1 981 "DES-CBC",
gustavatmel 1:9c5af431a1f1 982 8,
gustavatmel 1:9c5af431a1f1 983 0,
gustavatmel 1:9c5af431a1f1 984 8,
gustavatmel 1:9c5af431a1f1 985 &des_info
gustavatmel 1:9c5af431a1f1 986 };
gustavatmel 1:9c5af431a1f1 987 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 988
gustavatmel 1:9c5af431a1f1 989 static const mbedtls_cipher_base_t des_ede_info = {
gustavatmel 1:9c5af431a1f1 990 MBEDTLS_CIPHER_ID_DES,
gustavatmel 1:9c5af431a1f1 991 des3_crypt_ecb_wrap,
gustavatmel 1:9c5af431a1f1 992 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 993 des3_crypt_cbc_wrap,
gustavatmel 1:9c5af431a1f1 994 #endif
gustavatmel 1:9c5af431a1f1 995 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 996 NULL,
gustavatmel 1:9c5af431a1f1 997 #endif
gustavatmel 1:9c5af431a1f1 998 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 999 NULL,
gustavatmel 1:9c5af431a1f1 1000 #endif
gustavatmel 1:9c5af431a1f1 1001 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 1002 NULL,
gustavatmel 1:9c5af431a1f1 1003 #endif
gustavatmel 1:9c5af431a1f1 1004 des3_set2key_enc_wrap,
gustavatmel 1:9c5af431a1f1 1005 des3_set2key_dec_wrap,
gustavatmel 1:9c5af431a1f1 1006 des3_ctx_alloc,
gustavatmel 1:9c5af431a1f1 1007 des3_ctx_free
gustavatmel 1:9c5af431a1f1 1008 };
gustavatmel 1:9c5af431a1f1 1009
gustavatmel 1:9c5af431a1f1 1010 static const mbedtls_cipher_info_t des_ede_ecb_info = {
gustavatmel 1:9c5af431a1f1 1011 MBEDTLS_CIPHER_DES_EDE_ECB,
gustavatmel 1:9c5af431a1f1 1012 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 1013 MBEDTLS_KEY_LENGTH_DES_EDE,
gustavatmel 1:9c5af431a1f1 1014 "DES-EDE-ECB",
gustavatmel 1:9c5af431a1f1 1015 8,
gustavatmel 1:9c5af431a1f1 1016 0,
gustavatmel 1:9c5af431a1f1 1017 8,
gustavatmel 1:9c5af431a1f1 1018 &des_ede_info
gustavatmel 1:9c5af431a1f1 1019 };
gustavatmel 1:9c5af431a1f1 1020
gustavatmel 1:9c5af431a1f1 1021 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1022 static const mbedtls_cipher_info_t des_ede_cbc_info = {
gustavatmel 1:9c5af431a1f1 1023 MBEDTLS_CIPHER_DES_EDE_CBC,
gustavatmel 1:9c5af431a1f1 1024 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 1025 MBEDTLS_KEY_LENGTH_DES_EDE,
gustavatmel 1:9c5af431a1f1 1026 "DES-EDE-CBC",
gustavatmel 1:9c5af431a1f1 1027 8,
gustavatmel 1:9c5af431a1f1 1028 0,
gustavatmel 1:9c5af431a1f1 1029 8,
gustavatmel 1:9c5af431a1f1 1030 &des_ede_info
gustavatmel 1:9c5af431a1f1 1031 };
gustavatmel 1:9c5af431a1f1 1032 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 1033
gustavatmel 1:9c5af431a1f1 1034 static const mbedtls_cipher_base_t des_ede3_info = {
gustavatmel 1:9c5af431a1f1 1035 MBEDTLS_CIPHER_ID_3DES,
gustavatmel 1:9c5af431a1f1 1036 des3_crypt_ecb_wrap,
gustavatmel 1:9c5af431a1f1 1037 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1038 des3_crypt_cbc_wrap,
gustavatmel 1:9c5af431a1f1 1039 #endif
gustavatmel 1:9c5af431a1f1 1040 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1041 NULL,
gustavatmel 1:9c5af431a1f1 1042 #endif
gustavatmel 1:9c5af431a1f1 1043 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1044 NULL,
gustavatmel 1:9c5af431a1f1 1045 #endif
gustavatmel 1:9c5af431a1f1 1046 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 1047 NULL,
gustavatmel 1:9c5af431a1f1 1048 #endif
gustavatmel 1:9c5af431a1f1 1049 des3_set3key_enc_wrap,
gustavatmel 1:9c5af431a1f1 1050 des3_set3key_dec_wrap,
gustavatmel 1:9c5af431a1f1 1051 des3_ctx_alloc,
gustavatmel 1:9c5af431a1f1 1052 des3_ctx_free
gustavatmel 1:9c5af431a1f1 1053 };
gustavatmel 1:9c5af431a1f1 1054
gustavatmel 1:9c5af431a1f1 1055 static const mbedtls_cipher_info_t des_ede3_ecb_info = {
gustavatmel 1:9c5af431a1f1 1056 MBEDTLS_CIPHER_DES_EDE3_ECB,
gustavatmel 1:9c5af431a1f1 1057 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 1058 MBEDTLS_KEY_LENGTH_DES_EDE3,
gustavatmel 1:9c5af431a1f1 1059 "DES-EDE3-ECB",
gustavatmel 1:9c5af431a1f1 1060 8,
gustavatmel 1:9c5af431a1f1 1061 0,
gustavatmel 1:9c5af431a1f1 1062 8,
gustavatmel 1:9c5af431a1f1 1063 &des_ede3_info
gustavatmel 1:9c5af431a1f1 1064 };
gustavatmel 1:9c5af431a1f1 1065 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1066 static const mbedtls_cipher_info_t des_ede3_cbc_info = {
gustavatmel 1:9c5af431a1f1 1067 MBEDTLS_CIPHER_DES_EDE3_CBC,
gustavatmel 1:9c5af431a1f1 1068 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 1069 MBEDTLS_KEY_LENGTH_DES_EDE3,
gustavatmel 1:9c5af431a1f1 1070 "DES-EDE3-CBC",
gustavatmel 1:9c5af431a1f1 1071 8,
gustavatmel 1:9c5af431a1f1 1072 0,
gustavatmel 1:9c5af431a1f1 1073 8,
gustavatmel 1:9c5af431a1f1 1074 &des_ede3_info
gustavatmel 1:9c5af431a1f1 1075 };
gustavatmel 1:9c5af431a1f1 1076 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 1077 #endif /* MBEDTLS_DES_C */
gustavatmel 1:9c5af431a1f1 1078
gustavatmel 1:9c5af431a1f1 1079 #if defined(MBEDTLS_BLOWFISH_C)
gustavatmel 1:9c5af431a1f1 1080
gustavatmel 1:9c5af431a1f1 1081 static int blowfish_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 1082 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 1083 {
gustavatmel 1:9c5af431a1f1 1084 return mbedtls_blowfish_crypt_ecb( (mbedtls_blowfish_context *) ctx, operation, input,
gustavatmel 1:9c5af431a1f1 1085 output );
gustavatmel 1:9c5af431a1f1 1086 }
gustavatmel 1:9c5af431a1f1 1087
gustavatmel 1:9c5af431a1f1 1088 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1089 static int blowfish_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 1090 size_t length, unsigned char *iv, const unsigned char *input,
gustavatmel 1:9c5af431a1f1 1091 unsigned char *output )
gustavatmel 1:9c5af431a1f1 1092 {
gustavatmel 1:9c5af431a1f1 1093 return mbedtls_blowfish_crypt_cbc( (mbedtls_blowfish_context *) ctx, operation, length, iv,
gustavatmel 1:9c5af431a1f1 1094 input, output );
gustavatmel 1:9c5af431a1f1 1095 }
gustavatmel 1:9c5af431a1f1 1096 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 1097
gustavatmel 1:9c5af431a1f1 1098 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1099 static int blowfish_crypt_cfb64_wrap( void *ctx, mbedtls_operation_t operation,
gustavatmel 1:9c5af431a1f1 1100 size_t length, size_t *iv_off, unsigned char *iv,
gustavatmel 1:9c5af431a1f1 1101 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 1102 {
gustavatmel 1:9c5af431a1f1 1103 return mbedtls_blowfish_crypt_cfb64( (mbedtls_blowfish_context *) ctx, operation, length,
gustavatmel 1:9c5af431a1f1 1104 iv_off, iv, input, output );
gustavatmel 1:9c5af431a1f1 1105 }
gustavatmel 1:9c5af431a1f1 1106 #endif /* MBEDTLS_CIPHER_MODE_CFB */
gustavatmel 1:9c5af431a1f1 1107
gustavatmel 1:9c5af431a1f1 1108 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1109 static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
gustavatmel 1:9c5af431a1f1 1110 unsigned char *nonce_counter, unsigned char *stream_block,
gustavatmel 1:9c5af431a1f1 1111 const unsigned char *input, unsigned char *output )
gustavatmel 1:9c5af431a1f1 1112 {
gustavatmel 1:9c5af431a1f1 1113 return mbedtls_blowfish_crypt_ctr( (mbedtls_blowfish_context *) ctx, length, nc_off,
gustavatmel 1:9c5af431a1f1 1114 nonce_counter, stream_block, input, output );
gustavatmel 1:9c5af431a1f1 1115 }
gustavatmel 1:9c5af431a1f1 1116 #endif /* MBEDTLS_CIPHER_MODE_CTR */
gustavatmel 1:9c5af431a1f1 1117
gustavatmel 1:9c5af431a1f1 1118 static int blowfish_setkey_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 1119 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 1120 {
gustavatmel 1:9c5af431a1f1 1121 return mbedtls_blowfish_setkey( (mbedtls_blowfish_context *) ctx, key, key_bitlen );
gustavatmel 1:9c5af431a1f1 1122 }
gustavatmel 1:9c5af431a1f1 1123
gustavatmel 1:9c5af431a1f1 1124 static void * blowfish_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 1125 {
gustavatmel 1:9c5af431a1f1 1126 mbedtls_blowfish_context *ctx;
gustavatmel 1:9c5af431a1f1 1127 ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) );
gustavatmel 1:9c5af431a1f1 1128
gustavatmel 1:9c5af431a1f1 1129 if( ctx == NULL )
gustavatmel 1:9c5af431a1f1 1130 return( NULL );
gustavatmel 1:9c5af431a1f1 1131
gustavatmel 1:9c5af431a1f1 1132 mbedtls_blowfish_init( ctx );
gustavatmel 1:9c5af431a1f1 1133
gustavatmel 1:9c5af431a1f1 1134 return( ctx );
gustavatmel 1:9c5af431a1f1 1135 }
gustavatmel 1:9c5af431a1f1 1136
gustavatmel 1:9c5af431a1f1 1137 static void blowfish_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 1138 {
gustavatmel 1:9c5af431a1f1 1139 mbedtls_blowfish_free( (mbedtls_blowfish_context *) ctx );
gustavatmel 1:9c5af431a1f1 1140 mbedtls_free( ctx );
gustavatmel 1:9c5af431a1f1 1141 }
gustavatmel 1:9c5af431a1f1 1142
gustavatmel 1:9c5af431a1f1 1143 static const mbedtls_cipher_base_t blowfish_info = {
gustavatmel 1:9c5af431a1f1 1144 MBEDTLS_CIPHER_ID_BLOWFISH,
gustavatmel 1:9c5af431a1f1 1145 blowfish_crypt_ecb_wrap,
gustavatmel 1:9c5af431a1f1 1146 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1147 blowfish_crypt_cbc_wrap,
gustavatmel 1:9c5af431a1f1 1148 #endif
gustavatmel 1:9c5af431a1f1 1149 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1150 blowfish_crypt_cfb64_wrap,
gustavatmel 1:9c5af431a1f1 1151 #endif
gustavatmel 1:9c5af431a1f1 1152 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1153 blowfish_crypt_ctr_wrap,
gustavatmel 1:9c5af431a1f1 1154 #endif
gustavatmel 1:9c5af431a1f1 1155 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 1156 NULL,
gustavatmel 1:9c5af431a1f1 1157 #endif
gustavatmel 1:9c5af431a1f1 1158 blowfish_setkey_wrap,
gustavatmel 1:9c5af431a1f1 1159 blowfish_setkey_wrap,
gustavatmel 1:9c5af431a1f1 1160 blowfish_ctx_alloc,
gustavatmel 1:9c5af431a1f1 1161 blowfish_ctx_free
gustavatmel 1:9c5af431a1f1 1162 };
gustavatmel 1:9c5af431a1f1 1163
gustavatmel 1:9c5af431a1f1 1164 static const mbedtls_cipher_info_t blowfish_ecb_info = {
gustavatmel 1:9c5af431a1f1 1165 MBEDTLS_CIPHER_BLOWFISH_ECB,
gustavatmel 1:9c5af431a1f1 1166 MBEDTLS_MODE_ECB,
gustavatmel 1:9c5af431a1f1 1167 128,
gustavatmel 1:9c5af431a1f1 1168 "BLOWFISH-ECB",
gustavatmel 1:9c5af431a1f1 1169 8,
gustavatmel 1:9c5af431a1f1 1170 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
gustavatmel 1:9c5af431a1f1 1171 8,
gustavatmel 1:9c5af431a1f1 1172 &blowfish_info
gustavatmel 1:9c5af431a1f1 1173 };
gustavatmel 1:9c5af431a1f1 1174
gustavatmel 1:9c5af431a1f1 1175 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1176 static const mbedtls_cipher_info_t blowfish_cbc_info = {
gustavatmel 1:9c5af431a1f1 1177 MBEDTLS_CIPHER_BLOWFISH_CBC,
gustavatmel 1:9c5af431a1f1 1178 MBEDTLS_MODE_CBC,
gustavatmel 1:9c5af431a1f1 1179 128,
gustavatmel 1:9c5af431a1f1 1180 "BLOWFISH-CBC",
gustavatmel 1:9c5af431a1f1 1181 8,
gustavatmel 1:9c5af431a1f1 1182 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
gustavatmel 1:9c5af431a1f1 1183 8,
gustavatmel 1:9c5af431a1f1 1184 &blowfish_info
gustavatmel 1:9c5af431a1f1 1185 };
gustavatmel 1:9c5af431a1f1 1186 #endif /* MBEDTLS_CIPHER_MODE_CBC */
gustavatmel 1:9c5af431a1f1 1187
gustavatmel 1:9c5af431a1f1 1188 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1189 static const mbedtls_cipher_info_t blowfish_cfb64_info = {
gustavatmel 1:9c5af431a1f1 1190 MBEDTLS_CIPHER_BLOWFISH_CFB64,
gustavatmel 1:9c5af431a1f1 1191 MBEDTLS_MODE_CFB,
gustavatmel 1:9c5af431a1f1 1192 128,
gustavatmel 1:9c5af431a1f1 1193 "BLOWFISH-CFB64",
gustavatmel 1:9c5af431a1f1 1194 8,
gustavatmel 1:9c5af431a1f1 1195 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
gustavatmel 1:9c5af431a1f1 1196 8,
gustavatmel 1:9c5af431a1f1 1197 &blowfish_info
gustavatmel 1:9c5af431a1f1 1198 };
gustavatmel 1:9c5af431a1f1 1199 #endif /* MBEDTLS_CIPHER_MODE_CFB */
gustavatmel 1:9c5af431a1f1 1200
gustavatmel 1:9c5af431a1f1 1201 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1202 static const mbedtls_cipher_info_t blowfish_ctr_info = {
gustavatmel 1:9c5af431a1f1 1203 MBEDTLS_CIPHER_BLOWFISH_CTR,
gustavatmel 1:9c5af431a1f1 1204 MBEDTLS_MODE_CTR,
gustavatmel 1:9c5af431a1f1 1205 128,
gustavatmel 1:9c5af431a1f1 1206 "BLOWFISH-CTR",
gustavatmel 1:9c5af431a1f1 1207 8,
gustavatmel 1:9c5af431a1f1 1208 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
gustavatmel 1:9c5af431a1f1 1209 8,
gustavatmel 1:9c5af431a1f1 1210 &blowfish_info
gustavatmel 1:9c5af431a1f1 1211 };
gustavatmel 1:9c5af431a1f1 1212 #endif /* MBEDTLS_CIPHER_MODE_CTR */
gustavatmel 1:9c5af431a1f1 1213 #endif /* MBEDTLS_BLOWFISH_C */
gustavatmel 1:9c5af431a1f1 1214
gustavatmel 1:9c5af431a1f1 1215 #if defined(MBEDTLS_ARC4_C)
gustavatmel 1:9c5af431a1f1 1216 static int arc4_crypt_stream_wrap( void *ctx, size_t length,
gustavatmel 1:9c5af431a1f1 1217 const unsigned char *input,
gustavatmel 1:9c5af431a1f1 1218 unsigned char *output )
gustavatmel 1:9c5af431a1f1 1219 {
gustavatmel 1:9c5af431a1f1 1220 return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) );
gustavatmel 1:9c5af431a1f1 1221 }
gustavatmel 1:9c5af431a1f1 1222
gustavatmel 1:9c5af431a1f1 1223 static int arc4_setkey_wrap( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 1224 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 1225 {
gustavatmel 1:9c5af431a1f1 1226 /* we get key_bitlen in bits, arc4 expects it in bytes */
gustavatmel 1:9c5af431a1f1 1227 if( key_bitlen % 8 != 0 )
gustavatmel 1:9c5af431a1f1 1228 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
gustavatmel 1:9c5af431a1f1 1229
gustavatmel 1:9c5af431a1f1 1230 mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 );
gustavatmel 1:9c5af431a1f1 1231 return( 0 );
gustavatmel 1:9c5af431a1f1 1232 }
gustavatmel 1:9c5af431a1f1 1233
gustavatmel 1:9c5af431a1f1 1234 static void * arc4_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 1235 {
gustavatmel 1:9c5af431a1f1 1236 mbedtls_arc4_context *ctx;
gustavatmel 1:9c5af431a1f1 1237 ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) );
gustavatmel 1:9c5af431a1f1 1238
gustavatmel 1:9c5af431a1f1 1239 if( ctx == NULL )
gustavatmel 1:9c5af431a1f1 1240 return( NULL );
gustavatmel 1:9c5af431a1f1 1241
gustavatmel 1:9c5af431a1f1 1242 mbedtls_arc4_init( ctx );
gustavatmel 1:9c5af431a1f1 1243
gustavatmel 1:9c5af431a1f1 1244 return( ctx );
gustavatmel 1:9c5af431a1f1 1245 }
gustavatmel 1:9c5af431a1f1 1246
gustavatmel 1:9c5af431a1f1 1247 static void arc4_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 1248 {
gustavatmel 1:9c5af431a1f1 1249 mbedtls_arc4_free( (mbedtls_arc4_context *) ctx );
gustavatmel 1:9c5af431a1f1 1250 mbedtls_free( ctx );
gustavatmel 1:9c5af431a1f1 1251 }
gustavatmel 1:9c5af431a1f1 1252
gustavatmel 1:9c5af431a1f1 1253 static const mbedtls_cipher_base_t arc4_base_info = {
gustavatmel 1:9c5af431a1f1 1254 MBEDTLS_CIPHER_ID_ARC4,
gustavatmel 1:9c5af431a1f1 1255 NULL,
gustavatmel 1:9c5af431a1f1 1256 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1257 NULL,
gustavatmel 1:9c5af431a1f1 1258 #endif
gustavatmel 1:9c5af431a1f1 1259 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1260 NULL,
gustavatmel 1:9c5af431a1f1 1261 #endif
gustavatmel 1:9c5af431a1f1 1262 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1263 NULL,
gustavatmel 1:9c5af431a1f1 1264 #endif
gustavatmel 1:9c5af431a1f1 1265 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 1266 arc4_crypt_stream_wrap,
gustavatmel 1:9c5af431a1f1 1267 #endif
gustavatmel 1:9c5af431a1f1 1268 arc4_setkey_wrap,
gustavatmel 1:9c5af431a1f1 1269 arc4_setkey_wrap,
gustavatmel 1:9c5af431a1f1 1270 arc4_ctx_alloc,
gustavatmel 1:9c5af431a1f1 1271 arc4_ctx_free
gustavatmel 1:9c5af431a1f1 1272 };
gustavatmel 1:9c5af431a1f1 1273
gustavatmel 1:9c5af431a1f1 1274 static const mbedtls_cipher_info_t arc4_128_info = {
gustavatmel 1:9c5af431a1f1 1275 MBEDTLS_CIPHER_ARC4_128,
gustavatmel 1:9c5af431a1f1 1276 MBEDTLS_MODE_STREAM,
gustavatmel 1:9c5af431a1f1 1277 128,
gustavatmel 1:9c5af431a1f1 1278 "ARC4-128",
gustavatmel 1:9c5af431a1f1 1279 0,
gustavatmel 1:9c5af431a1f1 1280 0,
gustavatmel 1:9c5af431a1f1 1281 1,
gustavatmel 1:9c5af431a1f1 1282 &arc4_base_info
gustavatmel 1:9c5af431a1f1 1283 };
gustavatmel 1:9c5af431a1f1 1284 #endif /* MBEDTLS_ARC4_C */
gustavatmel 1:9c5af431a1f1 1285
gustavatmel 1:9c5af431a1f1 1286 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
gustavatmel 1:9c5af431a1f1 1287 static int null_crypt_stream( void *ctx, size_t length,
gustavatmel 1:9c5af431a1f1 1288 const unsigned char *input,
gustavatmel 1:9c5af431a1f1 1289 unsigned char *output )
gustavatmel 1:9c5af431a1f1 1290 {
gustavatmel 1:9c5af431a1f1 1291 ((void) ctx);
gustavatmel 1:9c5af431a1f1 1292 memmove( output, input, length );
gustavatmel 1:9c5af431a1f1 1293 return( 0 );
gustavatmel 1:9c5af431a1f1 1294 }
gustavatmel 1:9c5af431a1f1 1295
gustavatmel 1:9c5af431a1f1 1296 static int null_setkey( void *ctx, const unsigned char *key,
gustavatmel 1:9c5af431a1f1 1297 unsigned int key_bitlen )
gustavatmel 1:9c5af431a1f1 1298 {
gustavatmel 1:9c5af431a1f1 1299 ((void) ctx);
gustavatmel 1:9c5af431a1f1 1300 ((void) key);
gustavatmel 1:9c5af431a1f1 1301 ((void) key_bitlen);
gustavatmel 1:9c5af431a1f1 1302
gustavatmel 1:9c5af431a1f1 1303 return( 0 );
gustavatmel 1:9c5af431a1f1 1304 }
gustavatmel 1:9c5af431a1f1 1305
gustavatmel 1:9c5af431a1f1 1306 static void * null_ctx_alloc( void )
gustavatmel 1:9c5af431a1f1 1307 {
gustavatmel 1:9c5af431a1f1 1308 return( (void *) 1 );
gustavatmel 1:9c5af431a1f1 1309 }
gustavatmel 1:9c5af431a1f1 1310
gustavatmel 1:9c5af431a1f1 1311 static void null_ctx_free( void *ctx )
gustavatmel 1:9c5af431a1f1 1312 {
gustavatmel 1:9c5af431a1f1 1313 ((void) ctx);
gustavatmel 1:9c5af431a1f1 1314 }
gustavatmel 1:9c5af431a1f1 1315
gustavatmel 1:9c5af431a1f1 1316 static const mbedtls_cipher_base_t null_base_info = {
gustavatmel 1:9c5af431a1f1 1317 MBEDTLS_CIPHER_ID_NULL,
gustavatmel 1:9c5af431a1f1 1318 NULL,
gustavatmel 1:9c5af431a1f1 1319 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1320 NULL,
gustavatmel 1:9c5af431a1f1 1321 #endif
gustavatmel 1:9c5af431a1f1 1322 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1323 NULL,
gustavatmel 1:9c5af431a1f1 1324 #endif
gustavatmel 1:9c5af431a1f1 1325 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1326 NULL,
gustavatmel 1:9c5af431a1f1 1327 #endif
gustavatmel 1:9c5af431a1f1 1328 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
gustavatmel 1:9c5af431a1f1 1329 null_crypt_stream,
gustavatmel 1:9c5af431a1f1 1330 #endif
gustavatmel 1:9c5af431a1f1 1331 null_setkey,
gustavatmel 1:9c5af431a1f1 1332 null_setkey,
gustavatmel 1:9c5af431a1f1 1333 null_ctx_alloc,
gustavatmel 1:9c5af431a1f1 1334 null_ctx_free
gustavatmel 1:9c5af431a1f1 1335 };
gustavatmel 1:9c5af431a1f1 1336
gustavatmel 1:9c5af431a1f1 1337 static const mbedtls_cipher_info_t null_cipher_info = {
gustavatmel 1:9c5af431a1f1 1338 MBEDTLS_CIPHER_NULL,
gustavatmel 1:9c5af431a1f1 1339 MBEDTLS_MODE_STREAM,
gustavatmel 1:9c5af431a1f1 1340 0,
gustavatmel 1:9c5af431a1f1 1341 "NULL",
gustavatmel 1:9c5af431a1f1 1342 0,
gustavatmel 1:9c5af431a1f1 1343 0,
gustavatmel 1:9c5af431a1f1 1344 1,
gustavatmel 1:9c5af431a1f1 1345 &null_base_info
gustavatmel 1:9c5af431a1f1 1346 };
gustavatmel 1:9c5af431a1f1 1347 #endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
gustavatmel 1:9c5af431a1f1 1348
gustavatmel 1:9c5af431a1f1 1349 const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
gustavatmel 1:9c5af431a1f1 1350 {
gustavatmel 1:9c5af431a1f1 1351 #if defined(MBEDTLS_AES_C)
gustavatmel 1:9c5af431a1f1 1352 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
gustavatmel 1:9c5af431a1f1 1353 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
gustavatmel 1:9c5af431a1f1 1354 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
gustavatmel 1:9c5af431a1f1 1355 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1356 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
gustavatmel 1:9c5af431a1f1 1357 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
gustavatmel 1:9c5af431a1f1 1358 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
gustavatmel 1:9c5af431a1f1 1359 #endif
gustavatmel 1:9c5af431a1f1 1360 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1361 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
gustavatmel 1:9c5af431a1f1 1362 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
gustavatmel 1:9c5af431a1f1 1363 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
gustavatmel 1:9c5af431a1f1 1364 #endif
gustavatmel 1:9c5af431a1f1 1365 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1366 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
gustavatmel 1:9c5af431a1f1 1367 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
gustavatmel 1:9c5af431a1f1 1368 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
gustavatmel 1:9c5af431a1f1 1369 #endif
gustavatmel 1:9c5af431a1f1 1370 #if defined(MBEDTLS_GCM_C)
gustavatmel 1:9c5af431a1f1 1371 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
gustavatmel 1:9c5af431a1f1 1372 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
gustavatmel 1:9c5af431a1f1 1373 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
gustavatmel 1:9c5af431a1f1 1374 #endif
gustavatmel 1:9c5af431a1f1 1375 #if defined(MBEDTLS_CCM_C)
gustavatmel 1:9c5af431a1f1 1376 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
gustavatmel 1:9c5af431a1f1 1377 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
gustavatmel 1:9c5af431a1f1 1378 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
gustavatmel 1:9c5af431a1f1 1379 #endif
gustavatmel 1:9c5af431a1f1 1380 #endif /* MBEDTLS_AES_C */
gustavatmel 1:9c5af431a1f1 1381
gustavatmel 1:9c5af431a1f1 1382 #if defined(MBEDTLS_ARC4_C)
gustavatmel 1:9c5af431a1f1 1383 { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info },
gustavatmel 1:9c5af431a1f1 1384 #endif
gustavatmel 1:9c5af431a1f1 1385
gustavatmel 1:9c5af431a1f1 1386 #if defined(MBEDTLS_BLOWFISH_C)
gustavatmel 1:9c5af431a1f1 1387 { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info },
gustavatmel 1:9c5af431a1f1 1388 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1389 { MBEDTLS_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info },
gustavatmel 1:9c5af431a1f1 1390 #endif
gustavatmel 1:9c5af431a1f1 1391 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1392 { MBEDTLS_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info },
gustavatmel 1:9c5af431a1f1 1393 #endif
gustavatmel 1:9c5af431a1f1 1394 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1395 { MBEDTLS_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info },
gustavatmel 1:9c5af431a1f1 1396 #endif
gustavatmel 1:9c5af431a1f1 1397 #endif /* MBEDTLS_BLOWFISH_C */
gustavatmel 1:9c5af431a1f1 1398
gustavatmel 1:9c5af431a1f1 1399 #if defined(MBEDTLS_CAMELLIA_C)
gustavatmel 1:9c5af431a1f1 1400 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
gustavatmel 1:9c5af431a1f1 1401 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
gustavatmel 1:9c5af431a1f1 1402 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
gustavatmel 1:9c5af431a1f1 1403 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1404 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
gustavatmel 1:9c5af431a1f1 1405 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
gustavatmel 1:9c5af431a1f1 1406 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
gustavatmel 1:9c5af431a1f1 1407 #endif
gustavatmel 1:9c5af431a1f1 1408 #if defined(MBEDTLS_CIPHER_MODE_CFB)
gustavatmel 1:9c5af431a1f1 1409 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
gustavatmel 1:9c5af431a1f1 1410 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
gustavatmel 1:9c5af431a1f1 1411 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
gustavatmel 1:9c5af431a1f1 1412 #endif
gustavatmel 1:9c5af431a1f1 1413 #if defined(MBEDTLS_CIPHER_MODE_CTR)
gustavatmel 1:9c5af431a1f1 1414 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
gustavatmel 1:9c5af431a1f1 1415 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
gustavatmel 1:9c5af431a1f1 1416 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
gustavatmel 1:9c5af431a1f1 1417 #endif
gustavatmel 1:9c5af431a1f1 1418 #if defined(MBEDTLS_GCM_C)
gustavatmel 1:9c5af431a1f1 1419 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
gustavatmel 1:9c5af431a1f1 1420 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
gustavatmel 1:9c5af431a1f1 1421 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
gustavatmel 1:9c5af431a1f1 1422 #endif
gustavatmel 1:9c5af431a1f1 1423 #if defined(MBEDTLS_CCM_C)
gustavatmel 1:9c5af431a1f1 1424 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
gustavatmel 1:9c5af431a1f1 1425 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
gustavatmel 1:9c5af431a1f1 1426 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
gustavatmel 1:9c5af431a1f1 1427 #endif
gustavatmel 1:9c5af431a1f1 1428 #endif /* MBEDTLS_CAMELLIA_C */
gustavatmel 1:9c5af431a1f1 1429
gustavatmel 1:9c5af431a1f1 1430 #if defined(MBEDTLS_DES_C)
gustavatmel 1:9c5af431a1f1 1431 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
gustavatmel 1:9c5af431a1f1 1432 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
gustavatmel 1:9c5af431a1f1 1433 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
gustavatmel 1:9c5af431a1f1 1434 #if defined(MBEDTLS_CIPHER_MODE_CBC)
gustavatmel 1:9c5af431a1f1 1435 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
gustavatmel 1:9c5af431a1f1 1436 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
gustavatmel 1:9c5af431a1f1 1437 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
gustavatmel 1:9c5af431a1f1 1438 #endif
gustavatmel 1:9c5af431a1f1 1439 #endif /* MBEDTLS_DES_C */
gustavatmel 1:9c5af431a1f1 1440
gustavatmel 1:9c5af431a1f1 1441 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
gustavatmel 1:9c5af431a1f1 1442 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
gustavatmel 1:9c5af431a1f1 1443 #endif /* MBEDTLS_CIPHER_NULL_CIPHER */
gustavatmel 1:9c5af431a1f1 1444
gustavatmel 1:9c5af431a1f1 1445 { MBEDTLS_CIPHER_NONE, NULL }
gustavatmel 1:9c5af431a1f1 1446 };
gustavatmel 1:9c5af431a1f1 1447
gustavatmel 1:9c5af431a1f1 1448 #define NUM_CIPHERS sizeof mbedtls_cipher_definitions / sizeof mbedtls_cipher_definitions[0]
gustavatmel 1:9c5af431a1f1 1449 int mbedtls_cipher_supported[NUM_CIPHERS];
gustavatmel 1:9c5af431a1f1 1450
gustavatmel 1:9c5af431a1f1 1451 #endif /* MBEDTLS_CIPHER_C */