mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

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