RTC auf true

Committer:
kevman
Date:
Wed Nov 28 15:10:15 2018 +0000
Revision:
0:38ceb79fef03
RTC modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:38ceb79fef03 1 /**
kevman 0:38ceb79fef03 2 * \file cipher_wrap.c
kevman 0:38ceb79fef03 3 *
kevman 0:38ceb79fef03 4 * \brief Generic cipher wrapper for mbed TLS
kevman 0:38ceb79fef03 5 *
kevman 0:38ceb79fef03 6 * \author Adriaan de Jong <dejong@fox-it.com>
kevman 0:38ceb79fef03 7 *
kevman 0:38ceb79fef03 8 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
kevman 0:38ceb79fef03 9 * SPDX-License-Identifier: Apache-2.0
kevman 0:38ceb79fef03 10 *
kevman 0:38ceb79fef03 11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
kevman 0:38ceb79fef03 12 * not use this file except in compliance with the License.
kevman 0:38ceb79fef03 13 * You may obtain a copy of the License at
kevman 0:38ceb79fef03 14 *
kevman 0:38ceb79fef03 15 * http://www.apache.org/licenses/LICENSE-2.0
kevman 0:38ceb79fef03 16 *
kevman 0:38ceb79fef03 17 * Unless required by applicable law or agreed to in writing, software
kevman 0:38ceb79fef03 18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
kevman 0:38ceb79fef03 19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kevman 0:38ceb79fef03 20 * See the License for the specific language governing permissions and
kevman 0:38ceb79fef03 21 * limitations under the License.
kevman 0:38ceb79fef03 22 *
kevman 0:38ceb79fef03 23 * This file is part of mbed TLS (https://tls.mbed.org)
kevman 0:38ceb79fef03 24 */
kevman 0:38ceb79fef03 25
kevman 0:38ceb79fef03 26 #if !defined(MBEDTLS_CONFIG_FILE)
kevman 0:38ceb79fef03 27 #include "mbedtls/config.h"
kevman 0:38ceb79fef03 28 #else
kevman 0:38ceb79fef03 29 #include MBEDTLS_CONFIG_FILE
kevman 0:38ceb79fef03 30 #endif
kevman 0:38ceb79fef03 31
kevman 0:38ceb79fef03 32 #if defined(MBEDTLS_CIPHER_C)
kevman 0:38ceb79fef03 33
kevman 0:38ceb79fef03 34 #include "mbedtls/cipher_internal.h"
kevman 0:38ceb79fef03 35
kevman 0:38ceb79fef03 36 #if defined(MBEDTLS_CHACHAPOLY_C)
kevman 0:38ceb79fef03 37 #include "mbedtls/chachapoly.h"
kevman 0:38ceb79fef03 38 #endif
kevman 0:38ceb79fef03 39
kevman 0:38ceb79fef03 40 #if defined(MBEDTLS_AES_C)
kevman 0:38ceb79fef03 41 #include "mbedtls/aes.h"
kevman 0:38ceb79fef03 42 #endif
kevman 0:38ceb79fef03 43
kevman 0:38ceb79fef03 44 #if defined(MBEDTLS_ARC4_C)
kevman 0:38ceb79fef03 45 #include "mbedtls/arc4.h"
kevman 0:38ceb79fef03 46 #endif
kevman 0:38ceb79fef03 47
kevman 0:38ceb79fef03 48 #if defined(MBEDTLS_CAMELLIA_C)
kevman 0:38ceb79fef03 49 #include "mbedtls/camellia.h"
kevman 0:38ceb79fef03 50 #endif
kevman 0:38ceb79fef03 51
kevman 0:38ceb79fef03 52 #if defined(MBEDTLS_ARIA_C)
kevman 0:38ceb79fef03 53 #include "mbedtls/aria.h"
kevman 0:38ceb79fef03 54 #endif
kevman 0:38ceb79fef03 55
kevman 0:38ceb79fef03 56 #if defined(MBEDTLS_DES_C)
kevman 0:38ceb79fef03 57 #include "mbedtls/des.h"
kevman 0:38ceb79fef03 58 #endif
kevman 0:38ceb79fef03 59
kevman 0:38ceb79fef03 60 #if defined(MBEDTLS_BLOWFISH_C)
kevman 0:38ceb79fef03 61 #include "mbedtls/blowfish.h"
kevman 0:38ceb79fef03 62 #endif
kevman 0:38ceb79fef03 63
kevman 0:38ceb79fef03 64 #if defined(MBEDTLS_CHACHA20_C)
kevman 0:38ceb79fef03 65 #include "mbedtls/chacha20.h"
kevman 0:38ceb79fef03 66 #endif
kevman 0:38ceb79fef03 67
kevman 0:38ceb79fef03 68 #if defined(MBEDTLS_GCM_C)
kevman 0:38ceb79fef03 69 #include "mbedtls/gcm.h"
kevman 0:38ceb79fef03 70 #endif
kevman 0:38ceb79fef03 71
kevman 0:38ceb79fef03 72 #if defined(MBEDTLS_CCM_C)
kevman 0:38ceb79fef03 73 #include "mbedtls/ccm.h"
kevman 0:38ceb79fef03 74 #endif
kevman 0:38ceb79fef03 75
kevman 0:38ceb79fef03 76 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
kevman 0:38ceb79fef03 77 #include <string.h>
kevman 0:38ceb79fef03 78 #endif
kevman 0:38ceb79fef03 79
kevman 0:38ceb79fef03 80 #if defined(MBEDTLS_PLATFORM_C)
kevman 0:38ceb79fef03 81 #include "mbedtls/platform.h"
kevman 0:38ceb79fef03 82 #else
kevman 0:38ceb79fef03 83 #include <stdlib.h>
kevman 0:38ceb79fef03 84 #define mbedtls_calloc calloc
kevman 0:38ceb79fef03 85 #define mbedtls_free free
kevman 0:38ceb79fef03 86 #endif
kevman 0:38ceb79fef03 87
kevman 0:38ceb79fef03 88 #if defined(MBEDTLS_GCM_C)
kevman 0:38ceb79fef03 89 /* shared by all GCM ciphers */
kevman 0:38ceb79fef03 90 static void *gcm_ctx_alloc( void )
kevman 0:38ceb79fef03 91 {
kevman 0:38ceb79fef03 92 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) );
kevman 0:38ceb79fef03 93
kevman 0:38ceb79fef03 94 if( ctx != NULL )
kevman 0:38ceb79fef03 95 mbedtls_gcm_init( (mbedtls_gcm_context *) ctx );
kevman 0:38ceb79fef03 96
kevman 0:38ceb79fef03 97 return( ctx );
kevman 0:38ceb79fef03 98 }
kevman 0:38ceb79fef03 99
kevman 0:38ceb79fef03 100 static void gcm_ctx_free( void *ctx )
kevman 0:38ceb79fef03 101 {
kevman 0:38ceb79fef03 102 mbedtls_gcm_free( ctx );
kevman 0:38ceb79fef03 103 mbedtls_free( ctx );
kevman 0:38ceb79fef03 104 }
kevman 0:38ceb79fef03 105 #endif /* MBEDTLS_GCM_C */
kevman 0:38ceb79fef03 106
kevman 0:38ceb79fef03 107 #if defined(MBEDTLS_CCM_C)
kevman 0:38ceb79fef03 108 /* shared by all CCM ciphers */
kevman 0:38ceb79fef03 109 static void *ccm_ctx_alloc( void )
kevman 0:38ceb79fef03 110 {
kevman 0:38ceb79fef03 111 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) );
kevman 0:38ceb79fef03 112
kevman 0:38ceb79fef03 113 if( ctx != NULL )
kevman 0:38ceb79fef03 114 mbedtls_ccm_init( (mbedtls_ccm_context *) ctx );
kevman 0:38ceb79fef03 115
kevman 0:38ceb79fef03 116 return( ctx );
kevman 0:38ceb79fef03 117 }
kevman 0:38ceb79fef03 118
kevman 0:38ceb79fef03 119 static void ccm_ctx_free( void *ctx )
kevman 0:38ceb79fef03 120 {
kevman 0:38ceb79fef03 121 mbedtls_ccm_free( ctx );
kevman 0:38ceb79fef03 122 mbedtls_free( ctx );
kevman 0:38ceb79fef03 123 }
kevman 0:38ceb79fef03 124 #endif /* MBEDTLS_CCM_C */
kevman 0:38ceb79fef03 125
kevman 0:38ceb79fef03 126 #if defined(MBEDTLS_AES_C)
kevman 0:38ceb79fef03 127
kevman 0:38ceb79fef03 128 static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 129 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 130 {
kevman 0:38ceb79fef03 131 return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output );
kevman 0:38ceb79fef03 132 }
kevman 0:38ceb79fef03 133
kevman 0:38ceb79fef03 134 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 135 static int aes_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
kevman 0:38ceb79fef03 136 unsigned char *iv, const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 137 {
kevman 0:38ceb79fef03 138 return mbedtls_aes_crypt_cbc( (mbedtls_aes_context *) ctx, operation, length, iv, input,
kevman 0:38ceb79fef03 139 output );
kevman 0:38ceb79fef03 140 }
kevman 0:38ceb79fef03 141 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 142
kevman 0:38ceb79fef03 143 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 144 static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 145 size_t length, size_t *iv_off, unsigned char *iv,
kevman 0:38ceb79fef03 146 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 147 {
kevman 0:38ceb79fef03 148 return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
kevman 0:38ceb79fef03 149 input, output );
kevman 0:38ceb79fef03 150 }
kevman 0:38ceb79fef03 151 #endif /* MBEDTLS_CIPHER_MODE_CFB */
kevman 0:38ceb79fef03 152
kevman 0:38ceb79fef03 153 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 154 static int aes_crypt_ofb_wrap( void *ctx, size_t length, size_t *iv_off,
kevman 0:38ceb79fef03 155 unsigned char *iv, const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 156 {
kevman 0:38ceb79fef03 157 return mbedtls_aes_crypt_ofb( (mbedtls_aes_context *) ctx, length, iv_off,
kevman 0:38ceb79fef03 158 iv, input, output );
kevman 0:38ceb79fef03 159 }
kevman 0:38ceb79fef03 160 #endif /* MBEDTLS_CIPHER_MODE_OFB */
kevman 0:38ceb79fef03 161
kevman 0:38ceb79fef03 162 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 163 static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
kevman 0:38ceb79fef03 164 unsigned char *nonce_counter, unsigned char *stream_block,
kevman 0:38ceb79fef03 165 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 166 {
kevman 0:38ceb79fef03 167 return mbedtls_aes_crypt_ctr( (mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
kevman 0:38ceb79fef03 168 stream_block, input, output );
kevman 0:38ceb79fef03 169 }
kevman 0:38ceb79fef03 170 #endif /* MBEDTLS_CIPHER_MODE_CTR */
kevman 0:38ceb79fef03 171
kevman 0:38ceb79fef03 172 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 173 static int aes_crypt_xts_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 174 size_t length,
kevman 0:38ceb79fef03 175 const unsigned char data_unit[16],
kevman 0:38ceb79fef03 176 const unsigned char *input,
kevman 0:38ceb79fef03 177 unsigned char *output )
kevman 0:38ceb79fef03 178 {
kevman 0:38ceb79fef03 179 mbedtls_aes_xts_context *xts_ctx = ctx;
kevman 0:38ceb79fef03 180 int mode;
kevman 0:38ceb79fef03 181
kevman 0:38ceb79fef03 182 switch( operation )
kevman 0:38ceb79fef03 183 {
kevman 0:38ceb79fef03 184 case MBEDTLS_ENCRYPT:
kevman 0:38ceb79fef03 185 mode = MBEDTLS_AES_ENCRYPT;
kevman 0:38ceb79fef03 186 break;
kevman 0:38ceb79fef03 187 case MBEDTLS_DECRYPT:
kevman 0:38ceb79fef03 188 mode = MBEDTLS_AES_DECRYPT;
kevman 0:38ceb79fef03 189 break;
kevman 0:38ceb79fef03 190 default:
kevman 0:38ceb79fef03 191 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
kevman 0:38ceb79fef03 192 }
kevman 0:38ceb79fef03 193
kevman 0:38ceb79fef03 194 return mbedtls_aes_crypt_xts( xts_ctx, mode, length,
kevman 0:38ceb79fef03 195 data_unit, input, output );
kevman 0:38ceb79fef03 196 }
kevman 0:38ceb79fef03 197 #endif /* MBEDTLS_CIPHER_MODE_XTS */
kevman 0:38ceb79fef03 198
kevman 0:38ceb79fef03 199 static int aes_setkey_dec_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 200 unsigned int key_bitlen )
kevman 0:38ceb79fef03 201 {
kevman 0:38ceb79fef03 202 return mbedtls_aes_setkey_dec( (mbedtls_aes_context *) ctx, key, key_bitlen );
kevman 0:38ceb79fef03 203 }
kevman 0:38ceb79fef03 204
kevman 0:38ceb79fef03 205 static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 206 unsigned int key_bitlen )
kevman 0:38ceb79fef03 207 {
kevman 0:38ceb79fef03 208 return mbedtls_aes_setkey_enc( (mbedtls_aes_context *) ctx, key, key_bitlen );
kevman 0:38ceb79fef03 209 }
kevman 0:38ceb79fef03 210
kevman 0:38ceb79fef03 211 static void * aes_ctx_alloc( void )
kevman 0:38ceb79fef03 212 {
kevman 0:38ceb79fef03 213 mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) );
kevman 0:38ceb79fef03 214
kevman 0:38ceb79fef03 215 if( aes == NULL )
kevman 0:38ceb79fef03 216 return( NULL );
kevman 0:38ceb79fef03 217
kevman 0:38ceb79fef03 218 mbedtls_aes_init( aes );
kevman 0:38ceb79fef03 219
kevman 0:38ceb79fef03 220 return( aes );
kevman 0:38ceb79fef03 221 }
kevman 0:38ceb79fef03 222
kevman 0:38ceb79fef03 223 static void aes_ctx_free( void *ctx )
kevman 0:38ceb79fef03 224 {
kevman 0:38ceb79fef03 225 mbedtls_aes_free( (mbedtls_aes_context *) ctx );
kevman 0:38ceb79fef03 226 mbedtls_free( ctx );
kevman 0:38ceb79fef03 227 }
kevman 0:38ceb79fef03 228
kevman 0:38ceb79fef03 229 static const mbedtls_cipher_base_t aes_info = {
kevman 0:38ceb79fef03 230 MBEDTLS_CIPHER_ID_AES,
kevman 0:38ceb79fef03 231 aes_crypt_ecb_wrap,
kevman 0:38ceb79fef03 232 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 233 aes_crypt_cbc_wrap,
kevman 0:38ceb79fef03 234 #endif
kevman 0:38ceb79fef03 235 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 236 aes_crypt_cfb128_wrap,
kevman 0:38ceb79fef03 237 #endif
kevman 0:38ceb79fef03 238 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 239 aes_crypt_ofb_wrap,
kevman 0:38ceb79fef03 240 #endif
kevman 0:38ceb79fef03 241 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 242 aes_crypt_ctr_wrap,
kevman 0:38ceb79fef03 243 #endif
kevman 0:38ceb79fef03 244 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 245 NULL,
kevman 0:38ceb79fef03 246 #endif
kevman 0:38ceb79fef03 247 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 248 NULL,
kevman 0:38ceb79fef03 249 #endif
kevman 0:38ceb79fef03 250 aes_setkey_enc_wrap,
kevman 0:38ceb79fef03 251 aes_setkey_dec_wrap,
kevman 0:38ceb79fef03 252 aes_ctx_alloc,
kevman 0:38ceb79fef03 253 aes_ctx_free
kevman 0:38ceb79fef03 254 };
kevman 0:38ceb79fef03 255
kevman 0:38ceb79fef03 256 static const mbedtls_cipher_info_t aes_128_ecb_info = {
kevman 0:38ceb79fef03 257 MBEDTLS_CIPHER_AES_128_ECB,
kevman 0:38ceb79fef03 258 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 259 128,
kevman 0:38ceb79fef03 260 "AES-128-ECB",
kevman 0:38ceb79fef03 261 16,
kevman 0:38ceb79fef03 262 0,
kevman 0:38ceb79fef03 263 16,
kevman 0:38ceb79fef03 264 &aes_info
kevman 0:38ceb79fef03 265 };
kevman 0:38ceb79fef03 266
kevman 0:38ceb79fef03 267 static const mbedtls_cipher_info_t aes_192_ecb_info = {
kevman 0:38ceb79fef03 268 MBEDTLS_CIPHER_AES_192_ECB,
kevman 0:38ceb79fef03 269 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 270 192,
kevman 0:38ceb79fef03 271 "AES-192-ECB",
kevman 0:38ceb79fef03 272 16,
kevman 0:38ceb79fef03 273 0,
kevman 0:38ceb79fef03 274 16,
kevman 0:38ceb79fef03 275 &aes_info
kevman 0:38ceb79fef03 276 };
kevman 0:38ceb79fef03 277
kevman 0:38ceb79fef03 278 static const mbedtls_cipher_info_t aes_256_ecb_info = {
kevman 0:38ceb79fef03 279 MBEDTLS_CIPHER_AES_256_ECB,
kevman 0:38ceb79fef03 280 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 281 256,
kevman 0:38ceb79fef03 282 "AES-256-ECB",
kevman 0:38ceb79fef03 283 16,
kevman 0:38ceb79fef03 284 0,
kevman 0:38ceb79fef03 285 16,
kevman 0:38ceb79fef03 286 &aes_info
kevman 0:38ceb79fef03 287 };
kevman 0:38ceb79fef03 288
kevman 0:38ceb79fef03 289 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 290 static const mbedtls_cipher_info_t aes_128_cbc_info = {
kevman 0:38ceb79fef03 291 MBEDTLS_CIPHER_AES_128_CBC,
kevman 0:38ceb79fef03 292 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 293 128,
kevman 0:38ceb79fef03 294 "AES-128-CBC",
kevman 0:38ceb79fef03 295 16,
kevman 0:38ceb79fef03 296 0,
kevman 0:38ceb79fef03 297 16,
kevman 0:38ceb79fef03 298 &aes_info
kevman 0:38ceb79fef03 299 };
kevman 0:38ceb79fef03 300
kevman 0:38ceb79fef03 301 static const mbedtls_cipher_info_t aes_192_cbc_info = {
kevman 0:38ceb79fef03 302 MBEDTLS_CIPHER_AES_192_CBC,
kevman 0:38ceb79fef03 303 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 304 192,
kevman 0:38ceb79fef03 305 "AES-192-CBC",
kevman 0:38ceb79fef03 306 16,
kevman 0:38ceb79fef03 307 0,
kevman 0:38ceb79fef03 308 16,
kevman 0:38ceb79fef03 309 &aes_info
kevman 0:38ceb79fef03 310 };
kevman 0:38ceb79fef03 311
kevman 0:38ceb79fef03 312 static const mbedtls_cipher_info_t aes_256_cbc_info = {
kevman 0:38ceb79fef03 313 MBEDTLS_CIPHER_AES_256_CBC,
kevman 0:38ceb79fef03 314 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 315 256,
kevman 0:38ceb79fef03 316 "AES-256-CBC",
kevman 0:38ceb79fef03 317 16,
kevman 0:38ceb79fef03 318 0,
kevman 0:38ceb79fef03 319 16,
kevman 0:38ceb79fef03 320 &aes_info
kevman 0:38ceb79fef03 321 };
kevman 0:38ceb79fef03 322 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 323
kevman 0:38ceb79fef03 324 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 325 static const mbedtls_cipher_info_t aes_128_cfb128_info = {
kevman 0:38ceb79fef03 326 MBEDTLS_CIPHER_AES_128_CFB128,
kevman 0:38ceb79fef03 327 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 328 128,
kevman 0:38ceb79fef03 329 "AES-128-CFB128",
kevman 0:38ceb79fef03 330 16,
kevman 0:38ceb79fef03 331 0,
kevman 0:38ceb79fef03 332 16,
kevman 0:38ceb79fef03 333 &aes_info
kevman 0:38ceb79fef03 334 };
kevman 0:38ceb79fef03 335
kevman 0:38ceb79fef03 336 static const mbedtls_cipher_info_t aes_192_cfb128_info = {
kevman 0:38ceb79fef03 337 MBEDTLS_CIPHER_AES_192_CFB128,
kevman 0:38ceb79fef03 338 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 339 192,
kevman 0:38ceb79fef03 340 "AES-192-CFB128",
kevman 0:38ceb79fef03 341 16,
kevman 0:38ceb79fef03 342 0,
kevman 0:38ceb79fef03 343 16,
kevman 0:38ceb79fef03 344 &aes_info
kevman 0:38ceb79fef03 345 };
kevman 0:38ceb79fef03 346
kevman 0:38ceb79fef03 347 static const mbedtls_cipher_info_t aes_256_cfb128_info = {
kevman 0:38ceb79fef03 348 MBEDTLS_CIPHER_AES_256_CFB128,
kevman 0:38ceb79fef03 349 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 350 256,
kevman 0:38ceb79fef03 351 "AES-256-CFB128",
kevman 0:38ceb79fef03 352 16,
kevman 0:38ceb79fef03 353 0,
kevman 0:38ceb79fef03 354 16,
kevman 0:38ceb79fef03 355 &aes_info
kevman 0:38ceb79fef03 356 };
kevman 0:38ceb79fef03 357 #endif /* MBEDTLS_CIPHER_MODE_CFB */
kevman 0:38ceb79fef03 358
kevman 0:38ceb79fef03 359 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 360 static const mbedtls_cipher_info_t aes_128_ofb_info = {
kevman 0:38ceb79fef03 361 MBEDTLS_CIPHER_AES_128_OFB,
kevman 0:38ceb79fef03 362 MBEDTLS_MODE_OFB,
kevman 0:38ceb79fef03 363 128,
kevman 0:38ceb79fef03 364 "AES-128-OFB",
kevman 0:38ceb79fef03 365 16,
kevman 0:38ceb79fef03 366 0,
kevman 0:38ceb79fef03 367 16,
kevman 0:38ceb79fef03 368 &aes_info
kevman 0:38ceb79fef03 369 };
kevman 0:38ceb79fef03 370
kevman 0:38ceb79fef03 371 static const mbedtls_cipher_info_t aes_192_ofb_info = {
kevman 0:38ceb79fef03 372 MBEDTLS_CIPHER_AES_192_OFB,
kevman 0:38ceb79fef03 373 MBEDTLS_MODE_OFB,
kevman 0:38ceb79fef03 374 192,
kevman 0:38ceb79fef03 375 "AES-192-OFB",
kevman 0:38ceb79fef03 376 16,
kevman 0:38ceb79fef03 377 0,
kevman 0:38ceb79fef03 378 16,
kevman 0:38ceb79fef03 379 &aes_info
kevman 0:38ceb79fef03 380 };
kevman 0:38ceb79fef03 381
kevman 0:38ceb79fef03 382 static const mbedtls_cipher_info_t aes_256_ofb_info = {
kevman 0:38ceb79fef03 383 MBEDTLS_CIPHER_AES_256_OFB,
kevman 0:38ceb79fef03 384 MBEDTLS_MODE_OFB,
kevman 0:38ceb79fef03 385 256,
kevman 0:38ceb79fef03 386 "AES-256-OFB",
kevman 0:38ceb79fef03 387 16,
kevman 0:38ceb79fef03 388 0,
kevman 0:38ceb79fef03 389 16,
kevman 0:38ceb79fef03 390 &aes_info
kevman 0:38ceb79fef03 391 };
kevman 0:38ceb79fef03 392 #endif /* MBEDTLS_CIPHER_MODE_OFB */
kevman 0:38ceb79fef03 393
kevman 0:38ceb79fef03 394 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 395 static const mbedtls_cipher_info_t aes_128_ctr_info = {
kevman 0:38ceb79fef03 396 MBEDTLS_CIPHER_AES_128_CTR,
kevman 0:38ceb79fef03 397 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 398 128,
kevman 0:38ceb79fef03 399 "AES-128-CTR",
kevman 0:38ceb79fef03 400 16,
kevman 0:38ceb79fef03 401 0,
kevman 0:38ceb79fef03 402 16,
kevman 0:38ceb79fef03 403 &aes_info
kevman 0:38ceb79fef03 404 };
kevman 0:38ceb79fef03 405
kevman 0:38ceb79fef03 406 static const mbedtls_cipher_info_t aes_192_ctr_info = {
kevman 0:38ceb79fef03 407 MBEDTLS_CIPHER_AES_192_CTR,
kevman 0:38ceb79fef03 408 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 409 192,
kevman 0:38ceb79fef03 410 "AES-192-CTR",
kevman 0:38ceb79fef03 411 16,
kevman 0:38ceb79fef03 412 0,
kevman 0:38ceb79fef03 413 16,
kevman 0:38ceb79fef03 414 &aes_info
kevman 0:38ceb79fef03 415 };
kevman 0:38ceb79fef03 416
kevman 0:38ceb79fef03 417 static const mbedtls_cipher_info_t aes_256_ctr_info = {
kevman 0:38ceb79fef03 418 MBEDTLS_CIPHER_AES_256_CTR,
kevman 0:38ceb79fef03 419 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 420 256,
kevman 0:38ceb79fef03 421 "AES-256-CTR",
kevman 0:38ceb79fef03 422 16,
kevman 0:38ceb79fef03 423 0,
kevman 0:38ceb79fef03 424 16,
kevman 0:38ceb79fef03 425 &aes_info
kevman 0:38ceb79fef03 426 };
kevman 0:38ceb79fef03 427 #endif /* MBEDTLS_CIPHER_MODE_CTR */
kevman 0:38ceb79fef03 428
kevman 0:38ceb79fef03 429 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 430 static int xts_aes_setkey_enc_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 431 unsigned int key_bitlen )
kevman 0:38ceb79fef03 432 {
kevman 0:38ceb79fef03 433 mbedtls_aes_xts_context *xts_ctx = ctx;
kevman 0:38ceb79fef03 434 return( mbedtls_aes_xts_setkey_enc( xts_ctx, key, key_bitlen ) );
kevman 0:38ceb79fef03 435 }
kevman 0:38ceb79fef03 436
kevman 0:38ceb79fef03 437 static int xts_aes_setkey_dec_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 438 unsigned int key_bitlen )
kevman 0:38ceb79fef03 439 {
kevman 0:38ceb79fef03 440 mbedtls_aes_xts_context *xts_ctx = ctx;
kevman 0:38ceb79fef03 441 return( mbedtls_aes_xts_setkey_dec( xts_ctx, key, key_bitlen ) );
kevman 0:38ceb79fef03 442 }
kevman 0:38ceb79fef03 443
kevman 0:38ceb79fef03 444 static void *xts_aes_ctx_alloc( void )
kevman 0:38ceb79fef03 445 {
kevman 0:38ceb79fef03 446 mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc( 1, sizeof( *xts_ctx ) );
kevman 0:38ceb79fef03 447
kevman 0:38ceb79fef03 448 if( xts_ctx != NULL )
kevman 0:38ceb79fef03 449 mbedtls_aes_xts_init( xts_ctx );
kevman 0:38ceb79fef03 450
kevman 0:38ceb79fef03 451 return( xts_ctx );
kevman 0:38ceb79fef03 452 }
kevman 0:38ceb79fef03 453
kevman 0:38ceb79fef03 454 static void xts_aes_ctx_free( void *ctx )
kevman 0:38ceb79fef03 455 {
kevman 0:38ceb79fef03 456 mbedtls_aes_xts_context *xts_ctx = ctx;
kevman 0:38ceb79fef03 457
kevman 0:38ceb79fef03 458 if( xts_ctx == NULL )
kevman 0:38ceb79fef03 459 return;
kevman 0:38ceb79fef03 460
kevman 0:38ceb79fef03 461 mbedtls_aes_xts_free( xts_ctx );
kevman 0:38ceb79fef03 462 mbedtls_free( xts_ctx );
kevman 0:38ceb79fef03 463 }
kevman 0:38ceb79fef03 464
kevman 0:38ceb79fef03 465 static const mbedtls_cipher_base_t xts_aes_info = {
kevman 0:38ceb79fef03 466 MBEDTLS_CIPHER_ID_AES,
kevman 0:38ceb79fef03 467 NULL,
kevman 0:38ceb79fef03 468 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 469 NULL,
kevman 0:38ceb79fef03 470 #endif
kevman 0:38ceb79fef03 471 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 472 NULL,
kevman 0:38ceb79fef03 473 #endif
kevman 0:38ceb79fef03 474 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 475 NULL,
kevman 0:38ceb79fef03 476 #endif
kevman 0:38ceb79fef03 477 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 478 NULL,
kevman 0:38ceb79fef03 479 #endif
kevman 0:38ceb79fef03 480 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 481 aes_crypt_xts_wrap,
kevman 0:38ceb79fef03 482 #endif
kevman 0:38ceb79fef03 483 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 484 NULL,
kevman 0:38ceb79fef03 485 #endif
kevman 0:38ceb79fef03 486 xts_aes_setkey_enc_wrap,
kevman 0:38ceb79fef03 487 xts_aes_setkey_dec_wrap,
kevman 0:38ceb79fef03 488 xts_aes_ctx_alloc,
kevman 0:38ceb79fef03 489 xts_aes_ctx_free
kevman 0:38ceb79fef03 490 };
kevman 0:38ceb79fef03 491
kevman 0:38ceb79fef03 492 static const mbedtls_cipher_info_t aes_128_xts_info = {
kevman 0:38ceb79fef03 493 MBEDTLS_CIPHER_AES_128_XTS,
kevman 0:38ceb79fef03 494 MBEDTLS_MODE_XTS,
kevman 0:38ceb79fef03 495 256,
kevman 0:38ceb79fef03 496 "AES-128-XTS",
kevman 0:38ceb79fef03 497 16,
kevman 0:38ceb79fef03 498 0,
kevman 0:38ceb79fef03 499 16,
kevman 0:38ceb79fef03 500 &xts_aes_info
kevman 0:38ceb79fef03 501 };
kevman 0:38ceb79fef03 502
kevman 0:38ceb79fef03 503 static const mbedtls_cipher_info_t aes_256_xts_info = {
kevman 0:38ceb79fef03 504 MBEDTLS_CIPHER_AES_256_XTS,
kevman 0:38ceb79fef03 505 MBEDTLS_MODE_XTS,
kevman 0:38ceb79fef03 506 512,
kevman 0:38ceb79fef03 507 "AES-256-XTS",
kevman 0:38ceb79fef03 508 16,
kevman 0:38ceb79fef03 509 0,
kevman 0:38ceb79fef03 510 16,
kevman 0:38ceb79fef03 511 &xts_aes_info
kevman 0:38ceb79fef03 512 };
kevman 0:38ceb79fef03 513 #endif /* MBEDTLS_CIPHER_MODE_XTS */
kevman 0:38ceb79fef03 514
kevman 0:38ceb79fef03 515 #if defined(MBEDTLS_GCM_C)
kevman 0:38ceb79fef03 516 static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 517 unsigned int key_bitlen )
kevman 0:38ceb79fef03 518 {
kevman 0:38ceb79fef03 519 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
kevman 0:38ceb79fef03 520 key, key_bitlen );
kevman 0:38ceb79fef03 521 }
kevman 0:38ceb79fef03 522
kevman 0:38ceb79fef03 523 static const mbedtls_cipher_base_t gcm_aes_info = {
kevman 0:38ceb79fef03 524 MBEDTLS_CIPHER_ID_AES,
kevman 0:38ceb79fef03 525 NULL,
kevman 0:38ceb79fef03 526 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 527 NULL,
kevman 0:38ceb79fef03 528 #endif
kevman 0:38ceb79fef03 529 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 530 NULL,
kevman 0:38ceb79fef03 531 #endif
kevman 0:38ceb79fef03 532 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 533 NULL,
kevman 0:38ceb79fef03 534 #endif
kevman 0:38ceb79fef03 535 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 536 NULL,
kevman 0:38ceb79fef03 537 #endif
kevman 0:38ceb79fef03 538 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 539 NULL,
kevman 0:38ceb79fef03 540 #endif
kevman 0:38ceb79fef03 541 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 542 NULL,
kevman 0:38ceb79fef03 543 #endif
kevman 0:38ceb79fef03 544 gcm_aes_setkey_wrap,
kevman 0:38ceb79fef03 545 gcm_aes_setkey_wrap,
kevman 0:38ceb79fef03 546 gcm_ctx_alloc,
kevman 0:38ceb79fef03 547 gcm_ctx_free,
kevman 0:38ceb79fef03 548 };
kevman 0:38ceb79fef03 549
kevman 0:38ceb79fef03 550 static const mbedtls_cipher_info_t aes_128_gcm_info = {
kevman 0:38ceb79fef03 551 MBEDTLS_CIPHER_AES_128_GCM,
kevman 0:38ceb79fef03 552 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 553 128,
kevman 0:38ceb79fef03 554 "AES-128-GCM",
kevman 0:38ceb79fef03 555 12,
kevman 0:38ceb79fef03 556 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 557 16,
kevman 0:38ceb79fef03 558 &gcm_aes_info
kevman 0:38ceb79fef03 559 };
kevman 0:38ceb79fef03 560
kevman 0:38ceb79fef03 561 static const mbedtls_cipher_info_t aes_192_gcm_info = {
kevman 0:38ceb79fef03 562 MBEDTLS_CIPHER_AES_192_GCM,
kevman 0:38ceb79fef03 563 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 564 192,
kevman 0:38ceb79fef03 565 "AES-192-GCM",
kevman 0:38ceb79fef03 566 12,
kevman 0:38ceb79fef03 567 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 568 16,
kevman 0:38ceb79fef03 569 &gcm_aes_info
kevman 0:38ceb79fef03 570 };
kevman 0:38ceb79fef03 571
kevman 0:38ceb79fef03 572 static const mbedtls_cipher_info_t aes_256_gcm_info = {
kevman 0:38ceb79fef03 573 MBEDTLS_CIPHER_AES_256_GCM,
kevman 0:38ceb79fef03 574 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 575 256,
kevman 0:38ceb79fef03 576 "AES-256-GCM",
kevman 0:38ceb79fef03 577 12,
kevman 0:38ceb79fef03 578 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 579 16,
kevman 0:38ceb79fef03 580 &gcm_aes_info
kevman 0:38ceb79fef03 581 };
kevman 0:38ceb79fef03 582 #endif /* MBEDTLS_GCM_C */
kevman 0:38ceb79fef03 583
kevman 0:38ceb79fef03 584 #if defined(MBEDTLS_CCM_C)
kevman 0:38ceb79fef03 585 static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 586 unsigned int key_bitlen )
kevman 0:38ceb79fef03 587 {
kevman 0:38ceb79fef03 588 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
kevman 0:38ceb79fef03 589 key, key_bitlen );
kevman 0:38ceb79fef03 590 }
kevman 0:38ceb79fef03 591
kevman 0:38ceb79fef03 592 static const mbedtls_cipher_base_t ccm_aes_info = {
kevman 0:38ceb79fef03 593 MBEDTLS_CIPHER_ID_AES,
kevman 0:38ceb79fef03 594 NULL,
kevman 0:38ceb79fef03 595 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 596 NULL,
kevman 0:38ceb79fef03 597 #endif
kevman 0:38ceb79fef03 598 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 599 NULL,
kevman 0:38ceb79fef03 600 #endif
kevman 0:38ceb79fef03 601 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 602 NULL,
kevman 0:38ceb79fef03 603 #endif
kevman 0:38ceb79fef03 604 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 605 NULL,
kevman 0:38ceb79fef03 606 #endif
kevman 0:38ceb79fef03 607 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 608 NULL,
kevman 0:38ceb79fef03 609 #endif
kevman 0:38ceb79fef03 610 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 611 NULL,
kevman 0:38ceb79fef03 612 #endif
kevman 0:38ceb79fef03 613 ccm_aes_setkey_wrap,
kevman 0:38ceb79fef03 614 ccm_aes_setkey_wrap,
kevman 0:38ceb79fef03 615 ccm_ctx_alloc,
kevman 0:38ceb79fef03 616 ccm_ctx_free,
kevman 0:38ceb79fef03 617 };
kevman 0:38ceb79fef03 618
kevman 0:38ceb79fef03 619 static const mbedtls_cipher_info_t aes_128_ccm_info = {
kevman 0:38ceb79fef03 620 MBEDTLS_CIPHER_AES_128_CCM,
kevman 0:38ceb79fef03 621 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 622 128,
kevman 0:38ceb79fef03 623 "AES-128-CCM",
kevman 0:38ceb79fef03 624 12,
kevman 0:38ceb79fef03 625 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 626 16,
kevman 0:38ceb79fef03 627 &ccm_aes_info
kevman 0:38ceb79fef03 628 };
kevman 0:38ceb79fef03 629
kevman 0:38ceb79fef03 630 static const mbedtls_cipher_info_t aes_192_ccm_info = {
kevman 0:38ceb79fef03 631 MBEDTLS_CIPHER_AES_192_CCM,
kevman 0:38ceb79fef03 632 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 633 192,
kevman 0:38ceb79fef03 634 "AES-192-CCM",
kevman 0:38ceb79fef03 635 12,
kevman 0:38ceb79fef03 636 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 637 16,
kevman 0:38ceb79fef03 638 &ccm_aes_info
kevman 0:38ceb79fef03 639 };
kevman 0:38ceb79fef03 640
kevman 0:38ceb79fef03 641 static const mbedtls_cipher_info_t aes_256_ccm_info = {
kevman 0:38ceb79fef03 642 MBEDTLS_CIPHER_AES_256_CCM,
kevman 0:38ceb79fef03 643 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 644 256,
kevman 0:38ceb79fef03 645 "AES-256-CCM",
kevman 0:38ceb79fef03 646 12,
kevman 0:38ceb79fef03 647 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 648 16,
kevman 0:38ceb79fef03 649 &ccm_aes_info
kevman 0:38ceb79fef03 650 };
kevman 0:38ceb79fef03 651 #endif /* MBEDTLS_CCM_C */
kevman 0:38ceb79fef03 652
kevman 0:38ceb79fef03 653 #endif /* MBEDTLS_AES_C */
kevman 0:38ceb79fef03 654
kevman 0:38ceb79fef03 655 #if defined(MBEDTLS_CAMELLIA_C)
kevman 0:38ceb79fef03 656
kevman 0:38ceb79fef03 657 static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 658 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 659 {
kevman 0:38ceb79fef03 660 return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input,
kevman 0:38ceb79fef03 661 output );
kevman 0:38ceb79fef03 662 }
kevman 0:38ceb79fef03 663
kevman 0:38ceb79fef03 664 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 665 static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 666 size_t length, unsigned char *iv,
kevman 0:38ceb79fef03 667 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 668 {
kevman 0:38ceb79fef03 669 return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv,
kevman 0:38ceb79fef03 670 input, output );
kevman 0:38ceb79fef03 671 }
kevman 0:38ceb79fef03 672 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 673
kevman 0:38ceb79fef03 674 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 675 static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 676 size_t length, size_t *iv_off, unsigned char *iv,
kevman 0:38ceb79fef03 677 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 678 {
kevman 0:38ceb79fef03 679 return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length,
kevman 0:38ceb79fef03 680 iv_off, iv, input, output );
kevman 0:38ceb79fef03 681 }
kevman 0:38ceb79fef03 682 #endif /* MBEDTLS_CIPHER_MODE_CFB */
kevman 0:38ceb79fef03 683
kevman 0:38ceb79fef03 684 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 685 static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
kevman 0:38ceb79fef03 686 unsigned char *nonce_counter, unsigned char *stream_block,
kevman 0:38ceb79fef03 687 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 688 {
kevman 0:38ceb79fef03 689 return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off,
kevman 0:38ceb79fef03 690 nonce_counter, stream_block, input, output );
kevman 0:38ceb79fef03 691 }
kevman 0:38ceb79fef03 692 #endif /* MBEDTLS_CIPHER_MODE_CTR */
kevman 0:38ceb79fef03 693
kevman 0:38ceb79fef03 694 static int camellia_setkey_dec_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 695 unsigned int key_bitlen )
kevman 0:38ceb79fef03 696 {
kevman 0:38ceb79fef03 697 return mbedtls_camellia_setkey_dec( (mbedtls_camellia_context *) ctx, key, key_bitlen );
kevman 0:38ceb79fef03 698 }
kevman 0:38ceb79fef03 699
kevman 0:38ceb79fef03 700 static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 701 unsigned int key_bitlen )
kevman 0:38ceb79fef03 702 {
kevman 0:38ceb79fef03 703 return mbedtls_camellia_setkey_enc( (mbedtls_camellia_context *) ctx, key, key_bitlen );
kevman 0:38ceb79fef03 704 }
kevman 0:38ceb79fef03 705
kevman 0:38ceb79fef03 706 static void * camellia_ctx_alloc( void )
kevman 0:38ceb79fef03 707 {
kevman 0:38ceb79fef03 708 mbedtls_camellia_context *ctx;
kevman 0:38ceb79fef03 709 ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) );
kevman 0:38ceb79fef03 710
kevman 0:38ceb79fef03 711 if( ctx == NULL )
kevman 0:38ceb79fef03 712 return( NULL );
kevman 0:38ceb79fef03 713
kevman 0:38ceb79fef03 714 mbedtls_camellia_init( ctx );
kevman 0:38ceb79fef03 715
kevman 0:38ceb79fef03 716 return( ctx );
kevman 0:38ceb79fef03 717 }
kevman 0:38ceb79fef03 718
kevman 0:38ceb79fef03 719 static void camellia_ctx_free( void *ctx )
kevman 0:38ceb79fef03 720 {
kevman 0:38ceb79fef03 721 mbedtls_camellia_free( (mbedtls_camellia_context *) ctx );
kevman 0:38ceb79fef03 722 mbedtls_free( ctx );
kevman 0:38ceb79fef03 723 }
kevman 0:38ceb79fef03 724
kevman 0:38ceb79fef03 725 static const mbedtls_cipher_base_t camellia_info = {
kevman 0:38ceb79fef03 726 MBEDTLS_CIPHER_ID_CAMELLIA,
kevman 0:38ceb79fef03 727 camellia_crypt_ecb_wrap,
kevman 0:38ceb79fef03 728 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 729 camellia_crypt_cbc_wrap,
kevman 0:38ceb79fef03 730 #endif
kevman 0:38ceb79fef03 731 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 732 camellia_crypt_cfb128_wrap,
kevman 0:38ceb79fef03 733 #endif
kevman 0:38ceb79fef03 734 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 735 NULL,
kevman 0:38ceb79fef03 736 #endif
kevman 0:38ceb79fef03 737 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 738 camellia_crypt_ctr_wrap,
kevman 0:38ceb79fef03 739 #endif
kevman 0:38ceb79fef03 740 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 741 NULL,
kevman 0:38ceb79fef03 742 #endif
kevman 0:38ceb79fef03 743 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 744 NULL,
kevman 0:38ceb79fef03 745 #endif
kevman 0:38ceb79fef03 746 camellia_setkey_enc_wrap,
kevman 0:38ceb79fef03 747 camellia_setkey_dec_wrap,
kevman 0:38ceb79fef03 748 camellia_ctx_alloc,
kevman 0:38ceb79fef03 749 camellia_ctx_free
kevman 0:38ceb79fef03 750 };
kevman 0:38ceb79fef03 751
kevman 0:38ceb79fef03 752 static const mbedtls_cipher_info_t camellia_128_ecb_info = {
kevman 0:38ceb79fef03 753 MBEDTLS_CIPHER_CAMELLIA_128_ECB,
kevman 0:38ceb79fef03 754 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 755 128,
kevman 0:38ceb79fef03 756 "CAMELLIA-128-ECB",
kevman 0:38ceb79fef03 757 16,
kevman 0:38ceb79fef03 758 0,
kevman 0:38ceb79fef03 759 16,
kevman 0:38ceb79fef03 760 &camellia_info
kevman 0:38ceb79fef03 761 };
kevman 0:38ceb79fef03 762
kevman 0:38ceb79fef03 763 static const mbedtls_cipher_info_t camellia_192_ecb_info = {
kevman 0:38ceb79fef03 764 MBEDTLS_CIPHER_CAMELLIA_192_ECB,
kevman 0:38ceb79fef03 765 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 766 192,
kevman 0:38ceb79fef03 767 "CAMELLIA-192-ECB",
kevman 0:38ceb79fef03 768 16,
kevman 0:38ceb79fef03 769 0,
kevman 0:38ceb79fef03 770 16,
kevman 0:38ceb79fef03 771 &camellia_info
kevman 0:38ceb79fef03 772 };
kevman 0:38ceb79fef03 773
kevman 0:38ceb79fef03 774 static const mbedtls_cipher_info_t camellia_256_ecb_info = {
kevman 0:38ceb79fef03 775 MBEDTLS_CIPHER_CAMELLIA_256_ECB,
kevman 0:38ceb79fef03 776 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 777 256,
kevman 0:38ceb79fef03 778 "CAMELLIA-256-ECB",
kevman 0:38ceb79fef03 779 16,
kevman 0:38ceb79fef03 780 0,
kevman 0:38ceb79fef03 781 16,
kevman 0:38ceb79fef03 782 &camellia_info
kevman 0:38ceb79fef03 783 };
kevman 0:38ceb79fef03 784
kevman 0:38ceb79fef03 785 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 786 static const mbedtls_cipher_info_t camellia_128_cbc_info = {
kevman 0:38ceb79fef03 787 MBEDTLS_CIPHER_CAMELLIA_128_CBC,
kevman 0:38ceb79fef03 788 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 789 128,
kevman 0:38ceb79fef03 790 "CAMELLIA-128-CBC",
kevman 0:38ceb79fef03 791 16,
kevman 0:38ceb79fef03 792 0,
kevman 0:38ceb79fef03 793 16,
kevman 0:38ceb79fef03 794 &camellia_info
kevman 0:38ceb79fef03 795 };
kevman 0:38ceb79fef03 796
kevman 0:38ceb79fef03 797 static const mbedtls_cipher_info_t camellia_192_cbc_info = {
kevman 0:38ceb79fef03 798 MBEDTLS_CIPHER_CAMELLIA_192_CBC,
kevman 0:38ceb79fef03 799 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 800 192,
kevman 0:38ceb79fef03 801 "CAMELLIA-192-CBC",
kevman 0:38ceb79fef03 802 16,
kevman 0:38ceb79fef03 803 0,
kevman 0:38ceb79fef03 804 16,
kevman 0:38ceb79fef03 805 &camellia_info
kevman 0:38ceb79fef03 806 };
kevman 0:38ceb79fef03 807
kevman 0:38ceb79fef03 808 static const mbedtls_cipher_info_t camellia_256_cbc_info = {
kevman 0:38ceb79fef03 809 MBEDTLS_CIPHER_CAMELLIA_256_CBC,
kevman 0:38ceb79fef03 810 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 811 256,
kevman 0:38ceb79fef03 812 "CAMELLIA-256-CBC",
kevman 0:38ceb79fef03 813 16,
kevman 0:38ceb79fef03 814 0,
kevman 0:38ceb79fef03 815 16,
kevman 0:38ceb79fef03 816 &camellia_info
kevman 0:38ceb79fef03 817 };
kevman 0:38ceb79fef03 818 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 819
kevman 0:38ceb79fef03 820 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 821 static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
kevman 0:38ceb79fef03 822 MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
kevman 0:38ceb79fef03 823 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 824 128,
kevman 0:38ceb79fef03 825 "CAMELLIA-128-CFB128",
kevman 0:38ceb79fef03 826 16,
kevman 0:38ceb79fef03 827 0,
kevman 0:38ceb79fef03 828 16,
kevman 0:38ceb79fef03 829 &camellia_info
kevman 0:38ceb79fef03 830 };
kevman 0:38ceb79fef03 831
kevman 0:38ceb79fef03 832 static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
kevman 0:38ceb79fef03 833 MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
kevman 0:38ceb79fef03 834 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 835 192,
kevman 0:38ceb79fef03 836 "CAMELLIA-192-CFB128",
kevman 0:38ceb79fef03 837 16,
kevman 0:38ceb79fef03 838 0,
kevman 0:38ceb79fef03 839 16,
kevman 0:38ceb79fef03 840 &camellia_info
kevman 0:38ceb79fef03 841 };
kevman 0:38ceb79fef03 842
kevman 0:38ceb79fef03 843 static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
kevman 0:38ceb79fef03 844 MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
kevman 0:38ceb79fef03 845 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 846 256,
kevman 0:38ceb79fef03 847 "CAMELLIA-256-CFB128",
kevman 0:38ceb79fef03 848 16,
kevman 0:38ceb79fef03 849 0,
kevman 0:38ceb79fef03 850 16,
kevman 0:38ceb79fef03 851 &camellia_info
kevman 0:38ceb79fef03 852 };
kevman 0:38ceb79fef03 853 #endif /* MBEDTLS_CIPHER_MODE_CFB */
kevman 0:38ceb79fef03 854
kevman 0:38ceb79fef03 855 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 856 static const mbedtls_cipher_info_t camellia_128_ctr_info = {
kevman 0:38ceb79fef03 857 MBEDTLS_CIPHER_CAMELLIA_128_CTR,
kevman 0:38ceb79fef03 858 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 859 128,
kevman 0:38ceb79fef03 860 "CAMELLIA-128-CTR",
kevman 0:38ceb79fef03 861 16,
kevman 0:38ceb79fef03 862 0,
kevman 0:38ceb79fef03 863 16,
kevman 0:38ceb79fef03 864 &camellia_info
kevman 0:38ceb79fef03 865 };
kevman 0:38ceb79fef03 866
kevman 0:38ceb79fef03 867 static const mbedtls_cipher_info_t camellia_192_ctr_info = {
kevman 0:38ceb79fef03 868 MBEDTLS_CIPHER_CAMELLIA_192_CTR,
kevman 0:38ceb79fef03 869 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 870 192,
kevman 0:38ceb79fef03 871 "CAMELLIA-192-CTR",
kevman 0:38ceb79fef03 872 16,
kevman 0:38ceb79fef03 873 0,
kevman 0:38ceb79fef03 874 16,
kevman 0:38ceb79fef03 875 &camellia_info
kevman 0:38ceb79fef03 876 };
kevman 0:38ceb79fef03 877
kevman 0:38ceb79fef03 878 static const mbedtls_cipher_info_t camellia_256_ctr_info = {
kevman 0:38ceb79fef03 879 MBEDTLS_CIPHER_CAMELLIA_256_CTR,
kevman 0:38ceb79fef03 880 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 881 256,
kevman 0:38ceb79fef03 882 "CAMELLIA-256-CTR",
kevman 0:38ceb79fef03 883 16,
kevman 0:38ceb79fef03 884 0,
kevman 0:38ceb79fef03 885 16,
kevman 0:38ceb79fef03 886 &camellia_info
kevman 0:38ceb79fef03 887 };
kevman 0:38ceb79fef03 888 #endif /* MBEDTLS_CIPHER_MODE_CTR */
kevman 0:38ceb79fef03 889
kevman 0:38ceb79fef03 890 #if defined(MBEDTLS_GCM_C)
kevman 0:38ceb79fef03 891 static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 892 unsigned int key_bitlen )
kevman 0:38ceb79fef03 893 {
kevman 0:38ceb79fef03 894 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
kevman 0:38ceb79fef03 895 key, key_bitlen );
kevman 0:38ceb79fef03 896 }
kevman 0:38ceb79fef03 897
kevman 0:38ceb79fef03 898 static const mbedtls_cipher_base_t gcm_camellia_info = {
kevman 0:38ceb79fef03 899 MBEDTLS_CIPHER_ID_CAMELLIA,
kevman 0:38ceb79fef03 900 NULL,
kevman 0:38ceb79fef03 901 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 902 NULL,
kevman 0:38ceb79fef03 903 #endif
kevman 0:38ceb79fef03 904 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 905 NULL,
kevman 0:38ceb79fef03 906 #endif
kevman 0:38ceb79fef03 907 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 908 NULL,
kevman 0:38ceb79fef03 909 #endif
kevman 0:38ceb79fef03 910 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 911 NULL,
kevman 0:38ceb79fef03 912 #endif
kevman 0:38ceb79fef03 913 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 914 NULL,
kevman 0:38ceb79fef03 915 #endif
kevman 0:38ceb79fef03 916 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 917 NULL,
kevman 0:38ceb79fef03 918 #endif
kevman 0:38ceb79fef03 919 gcm_camellia_setkey_wrap,
kevman 0:38ceb79fef03 920 gcm_camellia_setkey_wrap,
kevman 0:38ceb79fef03 921 gcm_ctx_alloc,
kevman 0:38ceb79fef03 922 gcm_ctx_free,
kevman 0:38ceb79fef03 923 };
kevman 0:38ceb79fef03 924
kevman 0:38ceb79fef03 925 static const mbedtls_cipher_info_t camellia_128_gcm_info = {
kevman 0:38ceb79fef03 926 MBEDTLS_CIPHER_CAMELLIA_128_GCM,
kevman 0:38ceb79fef03 927 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 928 128,
kevman 0:38ceb79fef03 929 "CAMELLIA-128-GCM",
kevman 0:38ceb79fef03 930 12,
kevman 0:38ceb79fef03 931 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 932 16,
kevman 0:38ceb79fef03 933 &gcm_camellia_info
kevman 0:38ceb79fef03 934 };
kevman 0:38ceb79fef03 935
kevman 0:38ceb79fef03 936 static const mbedtls_cipher_info_t camellia_192_gcm_info = {
kevman 0:38ceb79fef03 937 MBEDTLS_CIPHER_CAMELLIA_192_GCM,
kevman 0:38ceb79fef03 938 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 939 192,
kevman 0:38ceb79fef03 940 "CAMELLIA-192-GCM",
kevman 0:38ceb79fef03 941 12,
kevman 0:38ceb79fef03 942 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 943 16,
kevman 0:38ceb79fef03 944 &gcm_camellia_info
kevman 0:38ceb79fef03 945 };
kevman 0:38ceb79fef03 946
kevman 0:38ceb79fef03 947 static const mbedtls_cipher_info_t camellia_256_gcm_info = {
kevman 0:38ceb79fef03 948 MBEDTLS_CIPHER_CAMELLIA_256_GCM,
kevman 0:38ceb79fef03 949 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 950 256,
kevman 0:38ceb79fef03 951 "CAMELLIA-256-GCM",
kevman 0:38ceb79fef03 952 12,
kevman 0:38ceb79fef03 953 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 954 16,
kevman 0:38ceb79fef03 955 &gcm_camellia_info
kevman 0:38ceb79fef03 956 };
kevman 0:38ceb79fef03 957 #endif /* MBEDTLS_GCM_C */
kevman 0:38ceb79fef03 958
kevman 0:38ceb79fef03 959 #if defined(MBEDTLS_CCM_C)
kevman 0:38ceb79fef03 960 static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 961 unsigned int key_bitlen )
kevman 0:38ceb79fef03 962 {
kevman 0:38ceb79fef03 963 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
kevman 0:38ceb79fef03 964 key, key_bitlen );
kevman 0:38ceb79fef03 965 }
kevman 0:38ceb79fef03 966
kevman 0:38ceb79fef03 967 static const mbedtls_cipher_base_t ccm_camellia_info = {
kevman 0:38ceb79fef03 968 MBEDTLS_CIPHER_ID_CAMELLIA,
kevman 0:38ceb79fef03 969 NULL,
kevman 0:38ceb79fef03 970 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 971 NULL,
kevman 0:38ceb79fef03 972 #endif
kevman 0:38ceb79fef03 973 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 974 NULL,
kevman 0:38ceb79fef03 975 #endif
kevman 0:38ceb79fef03 976 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 977 NULL,
kevman 0:38ceb79fef03 978 #endif
kevman 0:38ceb79fef03 979 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 980 NULL,
kevman 0:38ceb79fef03 981 #endif
kevman 0:38ceb79fef03 982 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 983 NULL,
kevman 0:38ceb79fef03 984 #endif
kevman 0:38ceb79fef03 985 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 986 NULL,
kevman 0:38ceb79fef03 987 #endif
kevman 0:38ceb79fef03 988 ccm_camellia_setkey_wrap,
kevman 0:38ceb79fef03 989 ccm_camellia_setkey_wrap,
kevman 0:38ceb79fef03 990 ccm_ctx_alloc,
kevman 0:38ceb79fef03 991 ccm_ctx_free,
kevman 0:38ceb79fef03 992 };
kevman 0:38ceb79fef03 993
kevman 0:38ceb79fef03 994 static const mbedtls_cipher_info_t camellia_128_ccm_info = {
kevman 0:38ceb79fef03 995 MBEDTLS_CIPHER_CAMELLIA_128_CCM,
kevman 0:38ceb79fef03 996 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 997 128,
kevman 0:38ceb79fef03 998 "CAMELLIA-128-CCM",
kevman 0:38ceb79fef03 999 12,
kevman 0:38ceb79fef03 1000 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1001 16,
kevman 0:38ceb79fef03 1002 &ccm_camellia_info
kevman 0:38ceb79fef03 1003 };
kevman 0:38ceb79fef03 1004
kevman 0:38ceb79fef03 1005 static const mbedtls_cipher_info_t camellia_192_ccm_info = {
kevman 0:38ceb79fef03 1006 MBEDTLS_CIPHER_CAMELLIA_192_CCM,
kevman 0:38ceb79fef03 1007 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 1008 192,
kevman 0:38ceb79fef03 1009 "CAMELLIA-192-CCM",
kevman 0:38ceb79fef03 1010 12,
kevman 0:38ceb79fef03 1011 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1012 16,
kevman 0:38ceb79fef03 1013 &ccm_camellia_info
kevman 0:38ceb79fef03 1014 };
kevman 0:38ceb79fef03 1015
kevman 0:38ceb79fef03 1016 static const mbedtls_cipher_info_t camellia_256_ccm_info = {
kevman 0:38ceb79fef03 1017 MBEDTLS_CIPHER_CAMELLIA_256_CCM,
kevman 0:38ceb79fef03 1018 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 1019 256,
kevman 0:38ceb79fef03 1020 "CAMELLIA-256-CCM",
kevman 0:38ceb79fef03 1021 12,
kevman 0:38ceb79fef03 1022 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1023 16,
kevman 0:38ceb79fef03 1024 &ccm_camellia_info
kevman 0:38ceb79fef03 1025 };
kevman 0:38ceb79fef03 1026 #endif /* MBEDTLS_CCM_C */
kevman 0:38ceb79fef03 1027
kevman 0:38ceb79fef03 1028 #endif /* MBEDTLS_CAMELLIA_C */
kevman 0:38ceb79fef03 1029
kevman 0:38ceb79fef03 1030 #if defined(MBEDTLS_ARIA_C)
kevman 0:38ceb79fef03 1031
kevman 0:38ceb79fef03 1032 static int aria_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 1033 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1034 {
kevman 0:38ceb79fef03 1035 (void) operation;
kevman 0:38ceb79fef03 1036 return mbedtls_aria_crypt_ecb( (mbedtls_aria_context *) ctx, input,
kevman 0:38ceb79fef03 1037 output );
kevman 0:38ceb79fef03 1038 }
kevman 0:38ceb79fef03 1039
kevman 0:38ceb79fef03 1040 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1041 static int aria_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 1042 size_t length, unsigned char *iv,
kevman 0:38ceb79fef03 1043 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1044 {
kevman 0:38ceb79fef03 1045 return mbedtls_aria_crypt_cbc( (mbedtls_aria_context *) ctx, operation, length, iv,
kevman 0:38ceb79fef03 1046 input, output );
kevman 0:38ceb79fef03 1047 }
kevman 0:38ceb79fef03 1048 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1049
kevman 0:38ceb79fef03 1050 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1051 static int aria_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 1052 size_t length, size_t *iv_off, unsigned char *iv,
kevman 0:38ceb79fef03 1053 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1054 {
kevman 0:38ceb79fef03 1055 return mbedtls_aria_crypt_cfb128( (mbedtls_aria_context *) ctx, operation, length,
kevman 0:38ceb79fef03 1056 iv_off, iv, input, output );
kevman 0:38ceb79fef03 1057 }
kevman 0:38ceb79fef03 1058 #endif /* MBEDTLS_CIPHER_MODE_CFB */
kevman 0:38ceb79fef03 1059
kevman 0:38ceb79fef03 1060 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1061 static int aria_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
kevman 0:38ceb79fef03 1062 unsigned char *nonce_counter, unsigned char *stream_block,
kevman 0:38ceb79fef03 1063 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1064 {
kevman 0:38ceb79fef03 1065 return mbedtls_aria_crypt_ctr( (mbedtls_aria_context *) ctx, length, nc_off,
kevman 0:38ceb79fef03 1066 nonce_counter, stream_block, input, output );
kevman 0:38ceb79fef03 1067 }
kevman 0:38ceb79fef03 1068 #endif /* MBEDTLS_CIPHER_MODE_CTR */
kevman 0:38ceb79fef03 1069
kevman 0:38ceb79fef03 1070 static int aria_setkey_dec_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1071 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1072 {
kevman 0:38ceb79fef03 1073 return mbedtls_aria_setkey_dec( (mbedtls_aria_context *) ctx, key, key_bitlen );
kevman 0:38ceb79fef03 1074 }
kevman 0:38ceb79fef03 1075
kevman 0:38ceb79fef03 1076 static int aria_setkey_enc_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1077 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1078 {
kevman 0:38ceb79fef03 1079 return mbedtls_aria_setkey_enc( (mbedtls_aria_context *) ctx, key, key_bitlen );
kevman 0:38ceb79fef03 1080 }
kevman 0:38ceb79fef03 1081
kevman 0:38ceb79fef03 1082 static void * aria_ctx_alloc( void )
kevman 0:38ceb79fef03 1083 {
kevman 0:38ceb79fef03 1084 mbedtls_aria_context *ctx;
kevman 0:38ceb79fef03 1085 ctx = mbedtls_calloc( 1, sizeof( mbedtls_aria_context ) );
kevman 0:38ceb79fef03 1086
kevman 0:38ceb79fef03 1087 if( ctx == NULL )
kevman 0:38ceb79fef03 1088 return( NULL );
kevman 0:38ceb79fef03 1089
kevman 0:38ceb79fef03 1090 mbedtls_aria_init( ctx );
kevman 0:38ceb79fef03 1091
kevman 0:38ceb79fef03 1092 return( ctx );
kevman 0:38ceb79fef03 1093 }
kevman 0:38ceb79fef03 1094
kevman 0:38ceb79fef03 1095 static void aria_ctx_free( void *ctx )
kevman 0:38ceb79fef03 1096 {
kevman 0:38ceb79fef03 1097 mbedtls_aria_free( (mbedtls_aria_context *) ctx );
kevman 0:38ceb79fef03 1098 mbedtls_free( ctx );
kevman 0:38ceb79fef03 1099 }
kevman 0:38ceb79fef03 1100
kevman 0:38ceb79fef03 1101 static const mbedtls_cipher_base_t aria_info = {
kevman 0:38ceb79fef03 1102 MBEDTLS_CIPHER_ID_ARIA,
kevman 0:38ceb79fef03 1103 aria_crypt_ecb_wrap,
kevman 0:38ceb79fef03 1104 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1105 aria_crypt_cbc_wrap,
kevman 0:38ceb79fef03 1106 #endif
kevman 0:38ceb79fef03 1107 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1108 aria_crypt_cfb128_wrap,
kevman 0:38ceb79fef03 1109 #endif
kevman 0:38ceb79fef03 1110 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1111 NULL,
kevman 0:38ceb79fef03 1112 #endif
kevman 0:38ceb79fef03 1113 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1114 aria_crypt_ctr_wrap,
kevman 0:38ceb79fef03 1115 #endif
kevman 0:38ceb79fef03 1116 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1117 NULL,
kevman 0:38ceb79fef03 1118 #endif
kevman 0:38ceb79fef03 1119 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1120 NULL,
kevman 0:38ceb79fef03 1121 #endif
kevman 0:38ceb79fef03 1122 aria_setkey_enc_wrap,
kevman 0:38ceb79fef03 1123 aria_setkey_dec_wrap,
kevman 0:38ceb79fef03 1124 aria_ctx_alloc,
kevman 0:38ceb79fef03 1125 aria_ctx_free
kevman 0:38ceb79fef03 1126 };
kevman 0:38ceb79fef03 1127
kevman 0:38ceb79fef03 1128 static const mbedtls_cipher_info_t aria_128_ecb_info = {
kevman 0:38ceb79fef03 1129 MBEDTLS_CIPHER_ARIA_128_ECB,
kevman 0:38ceb79fef03 1130 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 1131 128,
kevman 0:38ceb79fef03 1132 "ARIA-128-ECB",
kevman 0:38ceb79fef03 1133 16,
kevman 0:38ceb79fef03 1134 0,
kevman 0:38ceb79fef03 1135 16,
kevman 0:38ceb79fef03 1136 &aria_info
kevman 0:38ceb79fef03 1137 };
kevman 0:38ceb79fef03 1138
kevman 0:38ceb79fef03 1139 static const mbedtls_cipher_info_t aria_192_ecb_info = {
kevman 0:38ceb79fef03 1140 MBEDTLS_CIPHER_ARIA_192_ECB,
kevman 0:38ceb79fef03 1141 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 1142 192,
kevman 0:38ceb79fef03 1143 "ARIA-192-ECB",
kevman 0:38ceb79fef03 1144 16,
kevman 0:38ceb79fef03 1145 0,
kevman 0:38ceb79fef03 1146 16,
kevman 0:38ceb79fef03 1147 &aria_info
kevman 0:38ceb79fef03 1148 };
kevman 0:38ceb79fef03 1149
kevman 0:38ceb79fef03 1150 static const mbedtls_cipher_info_t aria_256_ecb_info = {
kevman 0:38ceb79fef03 1151 MBEDTLS_CIPHER_ARIA_256_ECB,
kevman 0:38ceb79fef03 1152 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 1153 256,
kevman 0:38ceb79fef03 1154 "ARIA-256-ECB",
kevman 0:38ceb79fef03 1155 16,
kevman 0:38ceb79fef03 1156 0,
kevman 0:38ceb79fef03 1157 16,
kevman 0:38ceb79fef03 1158 &aria_info
kevman 0:38ceb79fef03 1159 };
kevman 0:38ceb79fef03 1160
kevman 0:38ceb79fef03 1161 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1162 static const mbedtls_cipher_info_t aria_128_cbc_info = {
kevman 0:38ceb79fef03 1163 MBEDTLS_CIPHER_ARIA_128_CBC,
kevman 0:38ceb79fef03 1164 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 1165 128,
kevman 0:38ceb79fef03 1166 "ARIA-128-CBC",
kevman 0:38ceb79fef03 1167 16,
kevman 0:38ceb79fef03 1168 0,
kevman 0:38ceb79fef03 1169 16,
kevman 0:38ceb79fef03 1170 &aria_info
kevman 0:38ceb79fef03 1171 };
kevman 0:38ceb79fef03 1172
kevman 0:38ceb79fef03 1173 static const mbedtls_cipher_info_t aria_192_cbc_info = {
kevman 0:38ceb79fef03 1174 MBEDTLS_CIPHER_ARIA_192_CBC,
kevman 0:38ceb79fef03 1175 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 1176 192,
kevman 0:38ceb79fef03 1177 "ARIA-192-CBC",
kevman 0:38ceb79fef03 1178 16,
kevman 0:38ceb79fef03 1179 0,
kevman 0:38ceb79fef03 1180 16,
kevman 0:38ceb79fef03 1181 &aria_info
kevman 0:38ceb79fef03 1182 };
kevman 0:38ceb79fef03 1183
kevman 0:38ceb79fef03 1184 static const mbedtls_cipher_info_t aria_256_cbc_info = {
kevman 0:38ceb79fef03 1185 MBEDTLS_CIPHER_ARIA_256_CBC,
kevman 0:38ceb79fef03 1186 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 1187 256,
kevman 0:38ceb79fef03 1188 "ARIA-256-CBC",
kevman 0:38ceb79fef03 1189 16,
kevman 0:38ceb79fef03 1190 0,
kevman 0:38ceb79fef03 1191 16,
kevman 0:38ceb79fef03 1192 &aria_info
kevman 0:38ceb79fef03 1193 };
kevman 0:38ceb79fef03 1194 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1195
kevman 0:38ceb79fef03 1196 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1197 static const mbedtls_cipher_info_t aria_128_cfb128_info = {
kevman 0:38ceb79fef03 1198 MBEDTLS_CIPHER_ARIA_128_CFB128,
kevman 0:38ceb79fef03 1199 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 1200 128,
kevman 0:38ceb79fef03 1201 "ARIA-128-CFB128",
kevman 0:38ceb79fef03 1202 16,
kevman 0:38ceb79fef03 1203 0,
kevman 0:38ceb79fef03 1204 16,
kevman 0:38ceb79fef03 1205 &aria_info
kevman 0:38ceb79fef03 1206 };
kevman 0:38ceb79fef03 1207
kevman 0:38ceb79fef03 1208 static const mbedtls_cipher_info_t aria_192_cfb128_info = {
kevman 0:38ceb79fef03 1209 MBEDTLS_CIPHER_ARIA_192_CFB128,
kevman 0:38ceb79fef03 1210 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 1211 192,
kevman 0:38ceb79fef03 1212 "ARIA-192-CFB128",
kevman 0:38ceb79fef03 1213 16,
kevman 0:38ceb79fef03 1214 0,
kevman 0:38ceb79fef03 1215 16,
kevman 0:38ceb79fef03 1216 &aria_info
kevman 0:38ceb79fef03 1217 };
kevman 0:38ceb79fef03 1218
kevman 0:38ceb79fef03 1219 static const mbedtls_cipher_info_t aria_256_cfb128_info = {
kevman 0:38ceb79fef03 1220 MBEDTLS_CIPHER_ARIA_256_CFB128,
kevman 0:38ceb79fef03 1221 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 1222 256,
kevman 0:38ceb79fef03 1223 "ARIA-256-CFB128",
kevman 0:38ceb79fef03 1224 16,
kevman 0:38ceb79fef03 1225 0,
kevman 0:38ceb79fef03 1226 16,
kevman 0:38ceb79fef03 1227 &aria_info
kevman 0:38ceb79fef03 1228 };
kevman 0:38ceb79fef03 1229 #endif /* MBEDTLS_CIPHER_MODE_CFB */
kevman 0:38ceb79fef03 1230
kevman 0:38ceb79fef03 1231 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1232 static const mbedtls_cipher_info_t aria_128_ctr_info = {
kevman 0:38ceb79fef03 1233 MBEDTLS_CIPHER_ARIA_128_CTR,
kevman 0:38ceb79fef03 1234 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 1235 128,
kevman 0:38ceb79fef03 1236 "ARIA-128-CTR",
kevman 0:38ceb79fef03 1237 16,
kevman 0:38ceb79fef03 1238 0,
kevman 0:38ceb79fef03 1239 16,
kevman 0:38ceb79fef03 1240 &aria_info
kevman 0:38ceb79fef03 1241 };
kevman 0:38ceb79fef03 1242
kevman 0:38ceb79fef03 1243 static const mbedtls_cipher_info_t aria_192_ctr_info = {
kevman 0:38ceb79fef03 1244 MBEDTLS_CIPHER_ARIA_192_CTR,
kevman 0:38ceb79fef03 1245 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 1246 192,
kevman 0:38ceb79fef03 1247 "ARIA-192-CTR",
kevman 0:38ceb79fef03 1248 16,
kevman 0:38ceb79fef03 1249 0,
kevman 0:38ceb79fef03 1250 16,
kevman 0:38ceb79fef03 1251 &aria_info
kevman 0:38ceb79fef03 1252 };
kevman 0:38ceb79fef03 1253
kevman 0:38ceb79fef03 1254 static const mbedtls_cipher_info_t aria_256_ctr_info = {
kevman 0:38ceb79fef03 1255 MBEDTLS_CIPHER_ARIA_256_CTR,
kevman 0:38ceb79fef03 1256 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 1257 256,
kevman 0:38ceb79fef03 1258 "ARIA-256-CTR",
kevman 0:38ceb79fef03 1259 16,
kevman 0:38ceb79fef03 1260 0,
kevman 0:38ceb79fef03 1261 16,
kevman 0:38ceb79fef03 1262 &aria_info
kevman 0:38ceb79fef03 1263 };
kevman 0:38ceb79fef03 1264 #endif /* MBEDTLS_CIPHER_MODE_CTR */
kevman 0:38ceb79fef03 1265
kevman 0:38ceb79fef03 1266 #if defined(MBEDTLS_GCM_C)
kevman 0:38ceb79fef03 1267 static int gcm_aria_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1268 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1269 {
kevman 0:38ceb79fef03 1270 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
kevman 0:38ceb79fef03 1271 key, key_bitlen );
kevman 0:38ceb79fef03 1272 }
kevman 0:38ceb79fef03 1273
kevman 0:38ceb79fef03 1274 static const mbedtls_cipher_base_t gcm_aria_info = {
kevman 0:38ceb79fef03 1275 MBEDTLS_CIPHER_ID_ARIA,
kevman 0:38ceb79fef03 1276 NULL,
kevman 0:38ceb79fef03 1277 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1278 NULL,
kevman 0:38ceb79fef03 1279 #endif
kevman 0:38ceb79fef03 1280 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1281 NULL,
kevman 0:38ceb79fef03 1282 #endif
kevman 0:38ceb79fef03 1283 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1284 NULL,
kevman 0:38ceb79fef03 1285 #endif
kevman 0:38ceb79fef03 1286 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1287 NULL,
kevman 0:38ceb79fef03 1288 #endif
kevman 0:38ceb79fef03 1289 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1290 NULL,
kevman 0:38ceb79fef03 1291 #endif
kevman 0:38ceb79fef03 1292 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1293 NULL,
kevman 0:38ceb79fef03 1294 #endif
kevman 0:38ceb79fef03 1295 gcm_aria_setkey_wrap,
kevman 0:38ceb79fef03 1296 gcm_aria_setkey_wrap,
kevman 0:38ceb79fef03 1297 gcm_ctx_alloc,
kevman 0:38ceb79fef03 1298 gcm_ctx_free,
kevman 0:38ceb79fef03 1299 };
kevman 0:38ceb79fef03 1300
kevman 0:38ceb79fef03 1301 static const mbedtls_cipher_info_t aria_128_gcm_info = {
kevman 0:38ceb79fef03 1302 MBEDTLS_CIPHER_ARIA_128_GCM,
kevman 0:38ceb79fef03 1303 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 1304 128,
kevman 0:38ceb79fef03 1305 "ARIA-128-GCM",
kevman 0:38ceb79fef03 1306 12,
kevman 0:38ceb79fef03 1307 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1308 16,
kevman 0:38ceb79fef03 1309 &gcm_aria_info
kevman 0:38ceb79fef03 1310 };
kevman 0:38ceb79fef03 1311
kevman 0:38ceb79fef03 1312 static const mbedtls_cipher_info_t aria_192_gcm_info = {
kevman 0:38ceb79fef03 1313 MBEDTLS_CIPHER_ARIA_192_GCM,
kevman 0:38ceb79fef03 1314 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 1315 192,
kevman 0:38ceb79fef03 1316 "ARIA-192-GCM",
kevman 0:38ceb79fef03 1317 12,
kevman 0:38ceb79fef03 1318 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1319 16,
kevman 0:38ceb79fef03 1320 &gcm_aria_info
kevman 0:38ceb79fef03 1321 };
kevman 0:38ceb79fef03 1322
kevman 0:38ceb79fef03 1323 static const mbedtls_cipher_info_t aria_256_gcm_info = {
kevman 0:38ceb79fef03 1324 MBEDTLS_CIPHER_ARIA_256_GCM,
kevman 0:38ceb79fef03 1325 MBEDTLS_MODE_GCM,
kevman 0:38ceb79fef03 1326 256,
kevman 0:38ceb79fef03 1327 "ARIA-256-GCM",
kevman 0:38ceb79fef03 1328 12,
kevman 0:38ceb79fef03 1329 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1330 16,
kevman 0:38ceb79fef03 1331 &gcm_aria_info
kevman 0:38ceb79fef03 1332 };
kevman 0:38ceb79fef03 1333 #endif /* MBEDTLS_GCM_C */
kevman 0:38ceb79fef03 1334
kevman 0:38ceb79fef03 1335 #if defined(MBEDTLS_CCM_C)
kevman 0:38ceb79fef03 1336 static int ccm_aria_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1337 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1338 {
kevman 0:38ceb79fef03 1339 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
kevman 0:38ceb79fef03 1340 key, key_bitlen );
kevman 0:38ceb79fef03 1341 }
kevman 0:38ceb79fef03 1342
kevman 0:38ceb79fef03 1343 static const mbedtls_cipher_base_t ccm_aria_info = {
kevman 0:38ceb79fef03 1344 MBEDTLS_CIPHER_ID_ARIA,
kevman 0:38ceb79fef03 1345 NULL,
kevman 0:38ceb79fef03 1346 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1347 NULL,
kevman 0:38ceb79fef03 1348 #endif
kevman 0:38ceb79fef03 1349 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1350 NULL,
kevman 0:38ceb79fef03 1351 #endif
kevman 0:38ceb79fef03 1352 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1353 NULL,
kevman 0:38ceb79fef03 1354 #endif
kevman 0:38ceb79fef03 1355 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1356 NULL,
kevman 0:38ceb79fef03 1357 #endif
kevman 0:38ceb79fef03 1358 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1359 NULL,
kevman 0:38ceb79fef03 1360 #endif
kevman 0:38ceb79fef03 1361 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1362 NULL,
kevman 0:38ceb79fef03 1363 #endif
kevman 0:38ceb79fef03 1364 ccm_aria_setkey_wrap,
kevman 0:38ceb79fef03 1365 ccm_aria_setkey_wrap,
kevman 0:38ceb79fef03 1366 ccm_ctx_alloc,
kevman 0:38ceb79fef03 1367 ccm_ctx_free,
kevman 0:38ceb79fef03 1368 };
kevman 0:38ceb79fef03 1369
kevman 0:38ceb79fef03 1370 static const mbedtls_cipher_info_t aria_128_ccm_info = {
kevman 0:38ceb79fef03 1371 MBEDTLS_CIPHER_ARIA_128_CCM,
kevman 0:38ceb79fef03 1372 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 1373 128,
kevman 0:38ceb79fef03 1374 "ARIA-128-CCM",
kevman 0:38ceb79fef03 1375 12,
kevman 0:38ceb79fef03 1376 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1377 16,
kevman 0:38ceb79fef03 1378 &ccm_aria_info
kevman 0:38ceb79fef03 1379 };
kevman 0:38ceb79fef03 1380
kevman 0:38ceb79fef03 1381 static const mbedtls_cipher_info_t aria_192_ccm_info = {
kevman 0:38ceb79fef03 1382 MBEDTLS_CIPHER_ARIA_192_CCM,
kevman 0:38ceb79fef03 1383 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 1384 192,
kevman 0:38ceb79fef03 1385 "ARIA-192-CCM",
kevman 0:38ceb79fef03 1386 12,
kevman 0:38ceb79fef03 1387 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1388 16,
kevman 0:38ceb79fef03 1389 &ccm_aria_info
kevman 0:38ceb79fef03 1390 };
kevman 0:38ceb79fef03 1391
kevman 0:38ceb79fef03 1392 static const mbedtls_cipher_info_t aria_256_ccm_info = {
kevman 0:38ceb79fef03 1393 MBEDTLS_CIPHER_ARIA_256_CCM,
kevman 0:38ceb79fef03 1394 MBEDTLS_MODE_CCM,
kevman 0:38ceb79fef03 1395 256,
kevman 0:38ceb79fef03 1396 "ARIA-256-CCM",
kevman 0:38ceb79fef03 1397 12,
kevman 0:38ceb79fef03 1398 MBEDTLS_CIPHER_VARIABLE_IV_LEN,
kevman 0:38ceb79fef03 1399 16,
kevman 0:38ceb79fef03 1400 &ccm_aria_info
kevman 0:38ceb79fef03 1401 };
kevman 0:38ceb79fef03 1402 #endif /* MBEDTLS_CCM_C */
kevman 0:38ceb79fef03 1403
kevman 0:38ceb79fef03 1404 #endif /* MBEDTLS_ARIA_C */
kevman 0:38ceb79fef03 1405
kevman 0:38ceb79fef03 1406 #if defined(MBEDTLS_DES_C)
kevman 0:38ceb79fef03 1407
kevman 0:38ceb79fef03 1408 static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 1409 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1410 {
kevman 0:38ceb79fef03 1411 ((void) operation);
kevman 0:38ceb79fef03 1412 return mbedtls_des_crypt_ecb( (mbedtls_des_context *) ctx, input, output );
kevman 0:38ceb79fef03 1413 }
kevman 0:38ceb79fef03 1414
kevman 0:38ceb79fef03 1415 static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 1416 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1417 {
kevman 0:38ceb79fef03 1418 ((void) operation);
kevman 0:38ceb79fef03 1419 return mbedtls_des3_crypt_ecb( (mbedtls_des3_context *) ctx, input, output );
kevman 0:38ceb79fef03 1420 }
kevman 0:38ceb79fef03 1421
kevman 0:38ceb79fef03 1422 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1423 static int des_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
kevman 0:38ceb79fef03 1424 unsigned char *iv, const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1425 {
kevman 0:38ceb79fef03 1426 return mbedtls_des_crypt_cbc( (mbedtls_des_context *) ctx, operation, length, iv, input,
kevman 0:38ceb79fef03 1427 output );
kevman 0:38ceb79fef03 1428 }
kevman 0:38ceb79fef03 1429 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1430
kevman 0:38ceb79fef03 1431 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1432 static int des3_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length,
kevman 0:38ceb79fef03 1433 unsigned char *iv, const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1434 {
kevman 0:38ceb79fef03 1435 return mbedtls_des3_crypt_cbc( (mbedtls_des3_context *) ctx, operation, length, iv, input,
kevman 0:38ceb79fef03 1436 output );
kevman 0:38ceb79fef03 1437 }
kevman 0:38ceb79fef03 1438 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1439
kevman 0:38ceb79fef03 1440 static int des_setkey_dec_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1441 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1442 {
kevman 0:38ceb79fef03 1443 ((void) key_bitlen);
kevman 0:38ceb79fef03 1444
kevman 0:38ceb79fef03 1445 return mbedtls_des_setkey_dec( (mbedtls_des_context *) ctx, key );
kevman 0:38ceb79fef03 1446 }
kevman 0:38ceb79fef03 1447
kevman 0:38ceb79fef03 1448 static int des_setkey_enc_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1449 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1450 {
kevman 0:38ceb79fef03 1451 ((void) key_bitlen);
kevman 0:38ceb79fef03 1452
kevman 0:38ceb79fef03 1453 return mbedtls_des_setkey_enc( (mbedtls_des_context *) ctx, key );
kevman 0:38ceb79fef03 1454 }
kevman 0:38ceb79fef03 1455
kevman 0:38ceb79fef03 1456 static int des3_set2key_dec_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1457 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1458 {
kevman 0:38ceb79fef03 1459 ((void) key_bitlen);
kevman 0:38ceb79fef03 1460
kevman 0:38ceb79fef03 1461 return mbedtls_des3_set2key_dec( (mbedtls_des3_context *) ctx, key );
kevman 0:38ceb79fef03 1462 }
kevman 0:38ceb79fef03 1463
kevman 0:38ceb79fef03 1464 static int des3_set2key_enc_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1465 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1466 {
kevman 0:38ceb79fef03 1467 ((void) key_bitlen);
kevman 0:38ceb79fef03 1468
kevman 0:38ceb79fef03 1469 return mbedtls_des3_set2key_enc( (mbedtls_des3_context *) ctx, key );
kevman 0:38ceb79fef03 1470 }
kevman 0:38ceb79fef03 1471
kevman 0:38ceb79fef03 1472 static int des3_set3key_dec_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1473 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1474 {
kevman 0:38ceb79fef03 1475 ((void) key_bitlen);
kevman 0:38ceb79fef03 1476
kevman 0:38ceb79fef03 1477 return mbedtls_des3_set3key_dec( (mbedtls_des3_context *) ctx, key );
kevman 0:38ceb79fef03 1478 }
kevman 0:38ceb79fef03 1479
kevman 0:38ceb79fef03 1480 static int des3_set3key_enc_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1481 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1482 {
kevman 0:38ceb79fef03 1483 ((void) key_bitlen);
kevman 0:38ceb79fef03 1484
kevman 0:38ceb79fef03 1485 return mbedtls_des3_set3key_enc( (mbedtls_des3_context *) ctx, key );
kevman 0:38ceb79fef03 1486 }
kevman 0:38ceb79fef03 1487
kevman 0:38ceb79fef03 1488 static void * des_ctx_alloc( void )
kevman 0:38ceb79fef03 1489 {
kevman 0:38ceb79fef03 1490 mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) );
kevman 0:38ceb79fef03 1491
kevman 0:38ceb79fef03 1492 if( des == NULL )
kevman 0:38ceb79fef03 1493 return( NULL );
kevman 0:38ceb79fef03 1494
kevman 0:38ceb79fef03 1495 mbedtls_des_init( des );
kevman 0:38ceb79fef03 1496
kevman 0:38ceb79fef03 1497 return( des );
kevman 0:38ceb79fef03 1498 }
kevman 0:38ceb79fef03 1499
kevman 0:38ceb79fef03 1500 static void des_ctx_free( void *ctx )
kevman 0:38ceb79fef03 1501 {
kevman 0:38ceb79fef03 1502 mbedtls_des_free( (mbedtls_des_context *) ctx );
kevman 0:38ceb79fef03 1503 mbedtls_free( ctx );
kevman 0:38ceb79fef03 1504 }
kevman 0:38ceb79fef03 1505
kevman 0:38ceb79fef03 1506 static void * des3_ctx_alloc( void )
kevman 0:38ceb79fef03 1507 {
kevman 0:38ceb79fef03 1508 mbedtls_des3_context *des3;
kevman 0:38ceb79fef03 1509 des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) );
kevman 0:38ceb79fef03 1510
kevman 0:38ceb79fef03 1511 if( des3 == NULL )
kevman 0:38ceb79fef03 1512 return( NULL );
kevman 0:38ceb79fef03 1513
kevman 0:38ceb79fef03 1514 mbedtls_des3_init( des3 );
kevman 0:38ceb79fef03 1515
kevman 0:38ceb79fef03 1516 return( des3 );
kevman 0:38ceb79fef03 1517 }
kevman 0:38ceb79fef03 1518
kevman 0:38ceb79fef03 1519 static void des3_ctx_free( void *ctx )
kevman 0:38ceb79fef03 1520 {
kevman 0:38ceb79fef03 1521 mbedtls_des3_free( (mbedtls_des3_context *) ctx );
kevman 0:38ceb79fef03 1522 mbedtls_free( ctx );
kevman 0:38ceb79fef03 1523 }
kevman 0:38ceb79fef03 1524
kevman 0:38ceb79fef03 1525 static const mbedtls_cipher_base_t des_info = {
kevman 0:38ceb79fef03 1526 MBEDTLS_CIPHER_ID_DES,
kevman 0:38ceb79fef03 1527 des_crypt_ecb_wrap,
kevman 0:38ceb79fef03 1528 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1529 des_crypt_cbc_wrap,
kevman 0:38ceb79fef03 1530 #endif
kevman 0:38ceb79fef03 1531 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1532 NULL,
kevman 0:38ceb79fef03 1533 #endif
kevman 0:38ceb79fef03 1534 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1535 NULL,
kevman 0:38ceb79fef03 1536 #endif
kevman 0:38ceb79fef03 1537 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1538 NULL,
kevman 0:38ceb79fef03 1539 #endif
kevman 0:38ceb79fef03 1540 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1541 NULL,
kevman 0:38ceb79fef03 1542 #endif
kevman 0:38ceb79fef03 1543 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1544 NULL,
kevman 0:38ceb79fef03 1545 #endif
kevman 0:38ceb79fef03 1546 des_setkey_enc_wrap,
kevman 0:38ceb79fef03 1547 des_setkey_dec_wrap,
kevman 0:38ceb79fef03 1548 des_ctx_alloc,
kevman 0:38ceb79fef03 1549 des_ctx_free
kevman 0:38ceb79fef03 1550 };
kevman 0:38ceb79fef03 1551
kevman 0:38ceb79fef03 1552 static const mbedtls_cipher_info_t des_ecb_info = {
kevman 0:38ceb79fef03 1553 MBEDTLS_CIPHER_DES_ECB,
kevman 0:38ceb79fef03 1554 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 1555 MBEDTLS_KEY_LENGTH_DES,
kevman 0:38ceb79fef03 1556 "DES-ECB",
kevman 0:38ceb79fef03 1557 8,
kevman 0:38ceb79fef03 1558 0,
kevman 0:38ceb79fef03 1559 8,
kevman 0:38ceb79fef03 1560 &des_info
kevman 0:38ceb79fef03 1561 };
kevman 0:38ceb79fef03 1562
kevman 0:38ceb79fef03 1563 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1564 static const mbedtls_cipher_info_t des_cbc_info = {
kevman 0:38ceb79fef03 1565 MBEDTLS_CIPHER_DES_CBC,
kevman 0:38ceb79fef03 1566 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 1567 MBEDTLS_KEY_LENGTH_DES,
kevman 0:38ceb79fef03 1568 "DES-CBC",
kevman 0:38ceb79fef03 1569 8,
kevman 0:38ceb79fef03 1570 0,
kevman 0:38ceb79fef03 1571 8,
kevman 0:38ceb79fef03 1572 &des_info
kevman 0:38ceb79fef03 1573 };
kevman 0:38ceb79fef03 1574 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1575
kevman 0:38ceb79fef03 1576 static const mbedtls_cipher_base_t des_ede_info = {
kevman 0:38ceb79fef03 1577 MBEDTLS_CIPHER_ID_DES,
kevman 0:38ceb79fef03 1578 des3_crypt_ecb_wrap,
kevman 0:38ceb79fef03 1579 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1580 des3_crypt_cbc_wrap,
kevman 0:38ceb79fef03 1581 #endif
kevman 0:38ceb79fef03 1582 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1583 NULL,
kevman 0:38ceb79fef03 1584 #endif
kevman 0:38ceb79fef03 1585 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1586 NULL,
kevman 0:38ceb79fef03 1587 #endif
kevman 0:38ceb79fef03 1588 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1589 NULL,
kevman 0:38ceb79fef03 1590 #endif
kevman 0:38ceb79fef03 1591 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1592 NULL,
kevman 0:38ceb79fef03 1593 #endif
kevman 0:38ceb79fef03 1594 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1595 NULL,
kevman 0:38ceb79fef03 1596 #endif
kevman 0:38ceb79fef03 1597 des3_set2key_enc_wrap,
kevman 0:38ceb79fef03 1598 des3_set2key_dec_wrap,
kevman 0:38ceb79fef03 1599 des3_ctx_alloc,
kevman 0:38ceb79fef03 1600 des3_ctx_free
kevman 0:38ceb79fef03 1601 };
kevman 0:38ceb79fef03 1602
kevman 0:38ceb79fef03 1603 static const mbedtls_cipher_info_t des_ede_ecb_info = {
kevman 0:38ceb79fef03 1604 MBEDTLS_CIPHER_DES_EDE_ECB,
kevman 0:38ceb79fef03 1605 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 1606 MBEDTLS_KEY_LENGTH_DES_EDE,
kevman 0:38ceb79fef03 1607 "DES-EDE-ECB",
kevman 0:38ceb79fef03 1608 8,
kevman 0:38ceb79fef03 1609 0,
kevman 0:38ceb79fef03 1610 8,
kevman 0:38ceb79fef03 1611 &des_ede_info
kevman 0:38ceb79fef03 1612 };
kevman 0:38ceb79fef03 1613
kevman 0:38ceb79fef03 1614 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1615 static const mbedtls_cipher_info_t des_ede_cbc_info = {
kevman 0:38ceb79fef03 1616 MBEDTLS_CIPHER_DES_EDE_CBC,
kevman 0:38ceb79fef03 1617 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 1618 MBEDTLS_KEY_LENGTH_DES_EDE,
kevman 0:38ceb79fef03 1619 "DES-EDE-CBC",
kevman 0:38ceb79fef03 1620 8,
kevman 0:38ceb79fef03 1621 0,
kevman 0:38ceb79fef03 1622 8,
kevman 0:38ceb79fef03 1623 &des_ede_info
kevman 0:38ceb79fef03 1624 };
kevman 0:38ceb79fef03 1625 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1626
kevman 0:38ceb79fef03 1627 static const mbedtls_cipher_base_t des_ede3_info = {
kevman 0:38ceb79fef03 1628 MBEDTLS_CIPHER_ID_3DES,
kevman 0:38ceb79fef03 1629 des3_crypt_ecb_wrap,
kevman 0:38ceb79fef03 1630 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1631 des3_crypt_cbc_wrap,
kevman 0:38ceb79fef03 1632 #endif
kevman 0:38ceb79fef03 1633 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1634 NULL,
kevman 0:38ceb79fef03 1635 #endif
kevman 0:38ceb79fef03 1636 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1637 NULL,
kevman 0:38ceb79fef03 1638 #endif
kevman 0:38ceb79fef03 1639 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1640 NULL,
kevman 0:38ceb79fef03 1641 #endif
kevman 0:38ceb79fef03 1642 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1643 NULL,
kevman 0:38ceb79fef03 1644 #endif
kevman 0:38ceb79fef03 1645 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1646 NULL,
kevman 0:38ceb79fef03 1647 #endif
kevman 0:38ceb79fef03 1648 des3_set3key_enc_wrap,
kevman 0:38ceb79fef03 1649 des3_set3key_dec_wrap,
kevman 0:38ceb79fef03 1650 des3_ctx_alloc,
kevman 0:38ceb79fef03 1651 des3_ctx_free
kevman 0:38ceb79fef03 1652 };
kevman 0:38ceb79fef03 1653
kevman 0:38ceb79fef03 1654 static const mbedtls_cipher_info_t des_ede3_ecb_info = {
kevman 0:38ceb79fef03 1655 MBEDTLS_CIPHER_DES_EDE3_ECB,
kevman 0:38ceb79fef03 1656 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 1657 MBEDTLS_KEY_LENGTH_DES_EDE3,
kevman 0:38ceb79fef03 1658 "DES-EDE3-ECB",
kevman 0:38ceb79fef03 1659 8,
kevman 0:38ceb79fef03 1660 0,
kevman 0:38ceb79fef03 1661 8,
kevman 0:38ceb79fef03 1662 &des_ede3_info
kevman 0:38ceb79fef03 1663 };
kevman 0:38ceb79fef03 1664 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1665 static const mbedtls_cipher_info_t des_ede3_cbc_info = {
kevman 0:38ceb79fef03 1666 MBEDTLS_CIPHER_DES_EDE3_CBC,
kevman 0:38ceb79fef03 1667 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 1668 MBEDTLS_KEY_LENGTH_DES_EDE3,
kevman 0:38ceb79fef03 1669 "DES-EDE3-CBC",
kevman 0:38ceb79fef03 1670 8,
kevman 0:38ceb79fef03 1671 0,
kevman 0:38ceb79fef03 1672 8,
kevman 0:38ceb79fef03 1673 &des_ede3_info
kevman 0:38ceb79fef03 1674 };
kevman 0:38ceb79fef03 1675 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1676 #endif /* MBEDTLS_DES_C */
kevman 0:38ceb79fef03 1677
kevman 0:38ceb79fef03 1678 #if defined(MBEDTLS_BLOWFISH_C)
kevman 0:38ceb79fef03 1679
kevman 0:38ceb79fef03 1680 static int blowfish_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 1681 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1682 {
kevman 0:38ceb79fef03 1683 return mbedtls_blowfish_crypt_ecb( (mbedtls_blowfish_context *) ctx, operation, input,
kevman 0:38ceb79fef03 1684 output );
kevman 0:38ceb79fef03 1685 }
kevman 0:38ceb79fef03 1686
kevman 0:38ceb79fef03 1687 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1688 static int blowfish_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 1689 size_t length, unsigned char *iv, const unsigned char *input,
kevman 0:38ceb79fef03 1690 unsigned char *output )
kevman 0:38ceb79fef03 1691 {
kevman 0:38ceb79fef03 1692 return mbedtls_blowfish_crypt_cbc( (mbedtls_blowfish_context *) ctx, operation, length, iv,
kevman 0:38ceb79fef03 1693 input, output );
kevman 0:38ceb79fef03 1694 }
kevman 0:38ceb79fef03 1695 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1696
kevman 0:38ceb79fef03 1697 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1698 static int blowfish_crypt_cfb64_wrap( void *ctx, mbedtls_operation_t operation,
kevman 0:38ceb79fef03 1699 size_t length, size_t *iv_off, unsigned char *iv,
kevman 0:38ceb79fef03 1700 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1701 {
kevman 0:38ceb79fef03 1702 return mbedtls_blowfish_crypt_cfb64( (mbedtls_blowfish_context *) ctx, operation, length,
kevman 0:38ceb79fef03 1703 iv_off, iv, input, output );
kevman 0:38ceb79fef03 1704 }
kevman 0:38ceb79fef03 1705 #endif /* MBEDTLS_CIPHER_MODE_CFB */
kevman 0:38ceb79fef03 1706
kevman 0:38ceb79fef03 1707 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1708 static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
kevman 0:38ceb79fef03 1709 unsigned char *nonce_counter, unsigned char *stream_block,
kevman 0:38ceb79fef03 1710 const unsigned char *input, unsigned char *output )
kevman 0:38ceb79fef03 1711 {
kevman 0:38ceb79fef03 1712 return mbedtls_blowfish_crypt_ctr( (mbedtls_blowfish_context *) ctx, length, nc_off,
kevman 0:38ceb79fef03 1713 nonce_counter, stream_block, input, output );
kevman 0:38ceb79fef03 1714 }
kevman 0:38ceb79fef03 1715 #endif /* MBEDTLS_CIPHER_MODE_CTR */
kevman 0:38ceb79fef03 1716
kevman 0:38ceb79fef03 1717 static int blowfish_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1718 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1719 {
kevman 0:38ceb79fef03 1720 return mbedtls_blowfish_setkey( (mbedtls_blowfish_context *) ctx, key, key_bitlen );
kevman 0:38ceb79fef03 1721 }
kevman 0:38ceb79fef03 1722
kevman 0:38ceb79fef03 1723 static void * blowfish_ctx_alloc( void )
kevman 0:38ceb79fef03 1724 {
kevman 0:38ceb79fef03 1725 mbedtls_blowfish_context *ctx;
kevman 0:38ceb79fef03 1726 ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) );
kevman 0:38ceb79fef03 1727
kevman 0:38ceb79fef03 1728 if( ctx == NULL )
kevman 0:38ceb79fef03 1729 return( NULL );
kevman 0:38ceb79fef03 1730
kevman 0:38ceb79fef03 1731 mbedtls_blowfish_init( ctx );
kevman 0:38ceb79fef03 1732
kevman 0:38ceb79fef03 1733 return( ctx );
kevman 0:38ceb79fef03 1734 }
kevman 0:38ceb79fef03 1735
kevman 0:38ceb79fef03 1736 static void blowfish_ctx_free( void *ctx )
kevman 0:38ceb79fef03 1737 {
kevman 0:38ceb79fef03 1738 mbedtls_blowfish_free( (mbedtls_blowfish_context *) ctx );
kevman 0:38ceb79fef03 1739 mbedtls_free( ctx );
kevman 0:38ceb79fef03 1740 }
kevman 0:38ceb79fef03 1741
kevman 0:38ceb79fef03 1742 static const mbedtls_cipher_base_t blowfish_info = {
kevman 0:38ceb79fef03 1743 MBEDTLS_CIPHER_ID_BLOWFISH,
kevman 0:38ceb79fef03 1744 blowfish_crypt_ecb_wrap,
kevman 0:38ceb79fef03 1745 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1746 blowfish_crypt_cbc_wrap,
kevman 0:38ceb79fef03 1747 #endif
kevman 0:38ceb79fef03 1748 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1749 blowfish_crypt_cfb64_wrap,
kevman 0:38ceb79fef03 1750 #endif
kevman 0:38ceb79fef03 1751 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1752 NULL,
kevman 0:38ceb79fef03 1753 #endif
kevman 0:38ceb79fef03 1754 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1755 blowfish_crypt_ctr_wrap,
kevman 0:38ceb79fef03 1756 #endif
kevman 0:38ceb79fef03 1757 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1758 NULL,
kevman 0:38ceb79fef03 1759 #endif
kevman 0:38ceb79fef03 1760 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1761 NULL,
kevman 0:38ceb79fef03 1762 #endif
kevman 0:38ceb79fef03 1763 blowfish_setkey_wrap,
kevman 0:38ceb79fef03 1764 blowfish_setkey_wrap,
kevman 0:38ceb79fef03 1765 blowfish_ctx_alloc,
kevman 0:38ceb79fef03 1766 blowfish_ctx_free
kevman 0:38ceb79fef03 1767 };
kevman 0:38ceb79fef03 1768
kevman 0:38ceb79fef03 1769 static const mbedtls_cipher_info_t blowfish_ecb_info = {
kevman 0:38ceb79fef03 1770 MBEDTLS_CIPHER_BLOWFISH_ECB,
kevman 0:38ceb79fef03 1771 MBEDTLS_MODE_ECB,
kevman 0:38ceb79fef03 1772 128,
kevman 0:38ceb79fef03 1773 "BLOWFISH-ECB",
kevman 0:38ceb79fef03 1774 8,
kevman 0:38ceb79fef03 1775 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
kevman 0:38ceb79fef03 1776 8,
kevman 0:38ceb79fef03 1777 &blowfish_info
kevman 0:38ceb79fef03 1778 };
kevman 0:38ceb79fef03 1779
kevman 0:38ceb79fef03 1780 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1781 static const mbedtls_cipher_info_t blowfish_cbc_info = {
kevman 0:38ceb79fef03 1782 MBEDTLS_CIPHER_BLOWFISH_CBC,
kevman 0:38ceb79fef03 1783 MBEDTLS_MODE_CBC,
kevman 0:38ceb79fef03 1784 128,
kevman 0:38ceb79fef03 1785 "BLOWFISH-CBC",
kevman 0:38ceb79fef03 1786 8,
kevman 0:38ceb79fef03 1787 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
kevman 0:38ceb79fef03 1788 8,
kevman 0:38ceb79fef03 1789 &blowfish_info
kevman 0:38ceb79fef03 1790 };
kevman 0:38ceb79fef03 1791 #endif /* MBEDTLS_CIPHER_MODE_CBC */
kevman 0:38ceb79fef03 1792
kevman 0:38ceb79fef03 1793 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1794 static const mbedtls_cipher_info_t blowfish_cfb64_info = {
kevman 0:38ceb79fef03 1795 MBEDTLS_CIPHER_BLOWFISH_CFB64,
kevman 0:38ceb79fef03 1796 MBEDTLS_MODE_CFB,
kevman 0:38ceb79fef03 1797 128,
kevman 0:38ceb79fef03 1798 "BLOWFISH-CFB64",
kevman 0:38ceb79fef03 1799 8,
kevman 0:38ceb79fef03 1800 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
kevman 0:38ceb79fef03 1801 8,
kevman 0:38ceb79fef03 1802 &blowfish_info
kevman 0:38ceb79fef03 1803 };
kevman 0:38ceb79fef03 1804 #endif /* MBEDTLS_CIPHER_MODE_CFB */
kevman 0:38ceb79fef03 1805
kevman 0:38ceb79fef03 1806 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1807 static const mbedtls_cipher_info_t blowfish_ctr_info = {
kevman 0:38ceb79fef03 1808 MBEDTLS_CIPHER_BLOWFISH_CTR,
kevman 0:38ceb79fef03 1809 MBEDTLS_MODE_CTR,
kevman 0:38ceb79fef03 1810 128,
kevman 0:38ceb79fef03 1811 "BLOWFISH-CTR",
kevman 0:38ceb79fef03 1812 8,
kevman 0:38ceb79fef03 1813 MBEDTLS_CIPHER_VARIABLE_KEY_LEN,
kevman 0:38ceb79fef03 1814 8,
kevman 0:38ceb79fef03 1815 &blowfish_info
kevman 0:38ceb79fef03 1816 };
kevman 0:38ceb79fef03 1817 #endif /* MBEDTLS_CIPHER_MODE_CTR */
kevman 0:38ceb79fef03 1818 #endif /* MBEDTLS_BLOWFISH_C */
kevman 0:38ceb79fef03 1819
kevman 0:38ceb79fef03 1820 #if defined(MBEDTLS_ARC4_C)
kevman 0:38ceb79fef03 1821 static int arc4_crypt_stream_wrap( void *ctx, size_t length,
kevman 0:38ceb79fef03 1822 const unsigned char *input,
kevman 0:38ceb79fef03 1823 unsigned char *output )
kevman 0:38ceb79fef03 1824 {
kevman 0:38ceb79fef03 1825 return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) );
kevman 0:38ceb79fef03 1826 }
kevman 0:38ceb79fef03 1827
kevman 0:38ceb79fef03 1828 static int arc4_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1829 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1830 {
kevman 0:38ceb79fef03 1831 /* we get key_bitlen in bits, arc4 expects it in bytes */
kevman 0:38ceb79fef03 1832 if( key_bitlen % 8 != 0 )
kevman 0:38ceb79fef03 1833 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
kevman 0:38ceb79fef03 1834
kevman 0:38ceb79fef03 1835 mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 );
kevman 0:38ceb79fef03 1836 return( 0 );
kevman 0:38ceb79fef03 1837 }
kevman 0:38ceb79fef03 1838
kevman 0:38ceb79fef03 1839 static void * arc4_ctx_alloc( void )
kevman 0:38ceb79fef03 1840 {
kevman 0:38ceb79fef03 1841 mbedtls_arc4_context *ctx;
kevman 0:38ceb79fef03 1842 ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) );
kevman 0:38ceb79fef03 1843
kevman 0:38ceb79fef03 1844 if( ctx == NULL )
kevman 0:38ceb79fef03 1845 return( NULL );
kevman 0:38ceb79fef03 1846
kevman 0:38ceb79fef03 1847 mbedtls_arc4_init( ctx );
kevman 0:38ceb79fef03 1848
kevman 0:38ceb79fef03 1849 return( ctx );
kevman 0:38ceb79fef03 1850 }
kevman 0:38ceb79fef03 1851
kevman 0:38ceb79fef03 1852 static void arc4_ctx_free( void *ctx )
kevman 0:38ceb79fef03 1853 {
kevman 0:38ceb79fef03 1854 mbedtls_arc4_free( (mbedtls_arc4_context *) ctx );
kevman 0:38ceb79fef03 1855 mbedtls_free( ctx );
kevman 0:38ceb79fef03 1856 }
kevman 0:38ceb79fef03 1857
kevman 0:38ceb79fef03 1858 static const mbedtls_cipher_base_t arc4_base_info = {
kevman 0:38ceb79fef03 1859 MBEDTLS_CIPHER_ID_ARC4,
kevman 0:38ceb79fef03 1860 NULL,
kevman 0:38ceb79fef03 1861 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1862 NULL,
kevman 0:38ceb79fef03 1863 #endif
kevman 0:38ceb79fef03 1864 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1865 NULL,
kevman 0:38ceb79fef03 1866 #endif
kevman 0:38ceb79fef03 1867 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1868 NULL,
kevman 0:38ceb79fef03 1869 #endif
kevman 0:38ceb79fef03 1870 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1871 NULL,
kevman 0:38ceb79fef03 1872 #endif
kevman 0:38ceb79fef03 1873 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1874 NULL,
kevman 0:38ceb79fef03 1875 #endif
kevman 0:38ceb79fef03 1876 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1877 arc4_crypt_stream_wrap,
kevman 0:38ceb79fef03 1878 #endif
kevman 0:38ceb79fef03 1879 arc4_setkey_wrap,
kevman 0:38ceb79fef03 1880 arc4_setkey_wrap,
kevman 0:38ceb79fef03 1881 arc4_ctx_alloc,
kevman 0:38ceb79fef03 1882 arc4_ctx_free
kevman 0:38ceb79fef03 1883 };
kevman 0:38ceb79fef03 1884
kevman 0:38ceb79fef03 1885 static const mbedtls_cipher_info_t arc4_128_info = {
kevman 0:38ceb79fef03 1886 MBEDTLS_CIPHER_ARC4_128,
kevman 0:38ceb79fef03 1887 MBEDTLS_MODE_STREAM,
kevman 0:38ceb79fef03 1888 128,
kevman 0:38ceb79fef03 1889 "ARC4-128",
kevman 0:38ceb79fef03 1890 0,
kevman 0:38ceb79fef03 1891 0,
kevman 0:38ceb79fef03 1892 1,
kevman 0:38ceb79fef03 1893 &arc4_base_info
kevman 0:38ceb79fef03 1894 };
kevman 0:38ceb79fef03 1895 #endif /* MBEDTLS_ARC4_C */
kevman 0:38ceb79fef03 1896
kevman 0:38ceb79fef03 1897 #if defined(MBEDTLS_CHACHA20_C)
kevman 0:38ceb79fef03 1898
kevman 0:38ceb79fef03 1899 static int chacha20_setkey_wrap( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 1900 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1901 {
kevman 0:38ceb79fef03 1902 if( key_bitlen != 256U )
kevman 0:38ceb79fef03 1903 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
kevman 0:38ceb79fef03 1904
kevman 0:38ceb79fef03 1905 if ( 0 != mbedtls_chacha20_setkey( (mbedtls_chacha20_context*)ctx, key ) )
kevman 0:38ceb79fef03 1906 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
kevman 0:38ceb79fef03 1907
kevman 0:38ceb79fef03 1908 return( 0 );
kevman 0:38ceb79fef03 1909 }
kevman 0:38ceb79fef03 1910
kevman 0:38ceb79fef03 1911 static int chacha20_stream_wrap( void *ctx, size_t length,
kevman 0:38ceb79fef03 1912 const unsigned char *input,
kevman 0:38ceb79fef03 1913 unsigned char *output )
kevman 0:38ceb79fef03 1914 {
kevman 0:38ceb79fef03 1915 int ret;
kevman 0:38ceb79fef03 1916
kevman 0:38ceb79fef03 1917 ret = mbedtls_chacha20_update( ctx, length, input, output );
kevman 0:38ceb79fef03 1918 if( ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA )
kevman 0:38ceb79fef03 1919 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
kevman 0:38ceb79fef03 1920
kevman 0:38ceb79fef03 1921 return( ret );
kevman 0:38ceb79fef03 1922 }
kevman 0:38ceb79fef03 1923
kevman 0:38ceb79fef03 1924 static void * chacha20_ctx_alloc( void )
kevman 0:38ceb79fef03 1925 {
kevman 0:38ceb79fef03 1926 mbedtls_chacha20_context *ctx;
kevman 0:38ceb79fef03 1927 ctx = mbedtls_calloc( 1, sizeof( mbedtls_chacha20_context ) );
kevman 0:38ceb79fef03 1928
kevman 0:38ceb79fef03 1929 if( ctx == NULL )
kevman 0:38ceb79fef03 1930 return( NULL );
kevman 0:38ceb79fef03 1931
kevman 0:38ceb79fef03 1932 mbedtls_chacha20_init( ctx );
kevman 0:38ceb79fef03 1933
kevman 0:38ceb79fef03 1934 return( ctx );
kevman 0:38ceb79fef03 1935 }
kevman 0:38ceb79fef03 1936
kevman 0:38ceb79fef03 1937 static void chacha20_ctx_free( void *ctx )
kevman 0:38ceb79fef03 1938 {
kevman 0:38ceb79fef03 1939 mbedtls_chacha20_free( (mbedtls_chacha20_context *) ctx );
kevman 0:38ceb79fef03 1940 mbedtls_free( ctx );
kevman 0:38ceb79fef03 1941 }
kevman 0:38ceb79fef03 1942
kevman 0:38ceb79fef03 1943 static const mbedtls_cipher_base_t chacha20_base_info = {
kevman 0:38ceb79fef03 1944 MBEDTLS_CIPHER_ID_CHACHA20,
kevman 0:38ceb79fef03 1945 NULL,
kevman 0:38ceb79fef03 1946 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 1947 NULL,
kevman 0:38ceb79fef03 1948 #endif
kevman 0:38ceb79fef03 1949 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 1950 NULL,
kevman 0:38ceb79fef03 1951 #endif
kevman 0:38ceb79fef03 1952 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 1953 NULL,
kevman 0:38ceb79fef03 1954 #endif
kevman 0:38ceb79fef03 1955 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 1956 NULL,
kevman 0:38ceb79fef03 1957 #endif
kevman 0:38ceb79fef03 1958 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 1959 NULL,
kevman 0:38ceb79fef03 1960 #endif
kevman 0:38ceb79fef03 1961 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 1962 chacha20_stream_wrap,
kevman 0:38ceb79fef03 1963 #endif
kevman 0:38ceb79fef03 1964 chacha20_setkey_wrap,
kevman 0:38ceb79fef03 1965 chacha20_setkey_wrap,
kevman 0:38ceb79fef03 1966 chacha20_ctx_alloc,
kevman 0:38ceb79fef03 1967 chacha20_ctx_free
kevman 0:38ceb79fef03 1968 };
kevman 0:38ceb79fef03 1969 static const mbedtls_cipher_info_t chacha20_info = {
kevman 0:38ceb79fef03 1970 MBEDTLS_CIPHER_CHACHA20,
kevman 0:38ceb79fef03 1971 MBEDTLS_MODE_STREAM,
kevman 0:38ceb79fef03 1972 256,
kevman 0:38ceb79fef03 1973 "CHACHA20",
kevman 0:38ceb79fef03 1974 12,
kevman 0:38ceb79fef03 1975 0,
kevman 0:38ceb79fef03 1976 1,
kevman 0:38ceb79fef03 1977 &chacha20_base_info
kevman 0:38ceb79fef03 1978 };
kevman 0:38ceb79fef03 1979 #endif /* MBEDTLS_CHACHA20_C */
kevman 0:38ceb79fef03 1980
kevman 0:38ceb79fef03 1981 #if defined(MBEDTLS_CHACHAPOLY_C)
kevman 0:38ceb79fef03 1982
kevman 0:38ceb79fef03 1983 static int chachapoly_setkey_wrap( void *ctx,
kevman 0:38ceb79fef03 1984 const unsigned char *key,
kevman 0:38ceb79fef03 1985 unsigned int key_bitlen )
kevman 0:38ceb79fef03 1986 {
kevman 0:38ceb79fef03 1987 if( key_bitlen != 256U )
kevman 0:38ceb79fef03 1988 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
kevman 0:38ceb79fef03 1989
kevman 0:38ceb79fef03 1990 if ( 0 != mbedtls_chachapoly_setkey( (mbedtls_chachapoly_context*)ctx, key ) )
kevman 0:38ceb79fef03 1991 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
kevman 0:38ceb79fef03 1992
kevman 0:38ceb79fef03 1993 return( 0 );
kevman 0:38ceb79fef03 1994 }
kevman 0:38ceb79fef03 1995
kevman 0:38ceb79fef03 1996 static void * chachapoly_ctx_alloc( void )
kevman 0:38ceb79fef03 1997 {
kevman 0:38ceb79fef03 1998 mbedtls_chachapoly_context *ctx;
kevman 0:38ceb79fef03 1999 ctx = mbedtls_calloc( 1, sizeof( mbedtls_chachapoly_context ) );
kevman 0:38ceb79fef03 2000
kevman 0:38ceb79fef03 2001 if( ctx == NULL )
kevman 0:38ceb79fef03 2002 return( NULL );
kevman 0:38ceb79fef03 2003
kevman 0:38ceb79fef03 2004 mbedtls_chachapoly_init( ctx );
kevman 0:38ceb79fef03 2005
kevman 0:38ceb79fef03 2006 return( ctx );
kevman 0:38ceb79fef03 2007 }
kevman 0:38ceb79fef03 2008
kevman 0:38ceb79fef03 2009 static void chachapoly_ctx_free( void *ctx )
kevman 0:38ceb79fef03 2010 {
kevman 0:38ceb79fef03 2011 mbedtls_chachapoly_free( (mbedtls_chachapoly_context *) ctx );
kevman 0:38ceb79fef03 2012 mbedtls_free( ctx );
kevman 0:38ceb79fef03 2013 }
kevman 0:38ceb79fef03 2014
kevman 0:38ceb79fef03 2015 static const mbedtls_cipher_base_t chachapoly_base_info = {
kevman 0:38ceb79fef03 2016 MBEDTLS_CIPHER_ID_CHACHA20,
kevman 0:38ceb79fef03 2017 NULL,
kevman 0:38ceb79fef03 2018 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 2019 NULL,
kevman 0:38ceb79fef03 2020 #endif
kevman 0:38ceb79fef03 2021 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 2022 NULL,
kevman 0:38ceb79fef03 2023 #endif
kevman 0:38ceb79fef03 2024 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 2025 NULL,
kevman 0:38ceb79fef03 2026 #endif
kevman 0:38ceb79fef03 2027 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 2028 NULL,
kevman 0:38ceb79fef03 2029 #endif
kevman 0:38ceb79fef03 2030 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 2031 NULL,
kevman 0:38ceb79fef03 2032 #endif
kevman 0:38ceb79fef03 2033 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 2034 NULL,
kevman 0:38ceb79fef03 2035 #endif
kevman 0:38ceb79fef03 2036 chachapoly_setkey_wrap,
kevman 0:38ceb79fef03 2037 chachapoly_setkey_wrap,
kevman 0:38ceb79fef03 2038 chachapoly_ctx_alloc,
kevman 0:38ceb79fef03 2039 chachapoly_ctx_free
kevman 0:38ceb79fef03 2040 };
kevman 0:38ceb79fef03 2041 static const mbedtls_cipher_info_t chachapoly_info = {
kevman 0:38ceb79fef03 2042 MBEDTLS_CIPHER_CHACHA20_POLY1305,
kevman 0:38ceb79fef03 2043 MBEDTLS_MODE_CHACHAPOLY,
kevman 0:38ceb79fef03 2044 256,
kevman 0:38ceb79fef03 2045 "CHACHA20-POLY1305",
kevman 0:38ceb79fef03 2046 12,
kevman 0:38ceb79fef03 2047 0,
kevman 0:38ceb79fef03 2048 1,
kevman 0:38ceb79fef03 2049 &chachapoly_base_info
kevman 0:38ceb79fef03 2050 };
kevman 0:38ceb79fef03 2051 #endif /* MBEDTLS_CHACHAPOLY_C */
kevman 0:38ceb79fef03 2052
kevman 0:38ceb79fef03 2053 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
kevman 0:38ceb79fef03 2054 static int null_crypt_stream( void *ctx, size_t length,
kevman 0:38ceb79fef03 2055 const unsigned char *input,
kevman 0:38ceb79fef03 2056 unsigned char *output )
kevman 0:38ceb79fef03 2057 {
kevman 0:38ceb79fef03 2058 ((void) ctx);
kevman 0:38ceb79fef03 2059 memmove( output, input, length );
kevman 0:38ceb79fef03 2060 return( 0 );
kevman 0:38ceb79fef03 2061 }
kevman 0:38ceb79fef03 2062
kevman 0:38ceb79fef03 2063 static int null_setkey( void *ctx, const unsigned char *key,
kevman 0:38ceb79fef03 2064 unsigned int key_bitlen )
kevman 0:38ceb79fef03 2065 {
kevman 0:38ceb79fef03 2066 ((void) ctx);
kevman 0:38ceb79fef03 2067 ((void) key);
kevman 0:38ceb79fef03 2068 ((void) key_bitlen);
kevman 0:38ceb79fef03 2069
kevman 0:38ceb79fef03 2070 return( 0 );
kevman 0:38ceb79fef03 2071 }
kevman 0:38ceb79fef03 2072
kevman 0:38ceb79fef03 2073 static void * null_ctx_alloc( void )
kevman 0:38ceb79fef03 2074 {
kevman 0:38ceb79fef03 2075 return( (void *) 1 );
kevman 0:38ceb79fef03 2076 }
kevman 0:38ceb79fef03 2077
kevman 0:38ceb79fef03 2078 static void null_ctx_free( void *ctx )
kevman 0:38ceb79fef03 2079 {
kevman 0:38ceb79fef03 2080 ((void) ctx);
kevman 0:38ceb79fef03 2081 }
kevman 0:38ceb79fef03 2082
kevman 0:38ceb79fef03 2083 static const mbedtls_cipher_base_t null_base_info = {
kevman 0:38ceb79fef03 2084 MBEDTLS_CIPHER_ID_NULL,
kevman 0:38ceb79fef03 2085 NULL,
kevman 0:38ceb79fef03 2086 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 2087 NULL,
kevman 0:38ceb79fef03 2088 #endif
kevman 0:38ceb79fef03 2089 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 2090 NULL,
kevman 0:38ceb79fef03 2091 #endif
kevman 0:38ceb79fef03 2092 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 2093 NULL,
kevman 0:38ceb79fef03 2094 #endif
kevman 0:38ceb79fef03 2095 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 2096 NULL,
kevman 0:38ceb79fef03 2097 #endif
kevman 0:38ceb79fef03 2098 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 2099 NULL,
kevman 0:38ceb79fef03 2100 #endif
kevman 0:38ceb79fef03 2101 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
kevman 0:38ceb79fef03 2102 null_crypt_stream,
kevman 0:38ceb79fef03 2103 #endif
kevman 0:38ceb79fef03 2104 null_setkey,
kevman 0:38ceb79fef03 2105 null_setkey,
kevman 0:38ceb79fef03 2106 null_ctx_alloc,
kevman 0:38ceb79fef03 2107 null_ctx_free
kevman 0:38ceb79fef03 2108 };
kevman 0:38ceb79fef03 2109
kevman 0:38ceb79fef03 2110 static const mbedtls_cipher_info_t null_cipher_info = {
kevman 0:38ceb79fef03 2111 MBEDTLS_CIPHER_NULL,
kevman 0:38ceb79fef03 2112 MBEDTLS_MODE_STREAM,
kevman 0:38ceb79fef03 2113 0,
kevman 0:38ceb79fef03 2114 "NULL",
kevman 0:38ceb79fef03 2115 0,
kevman 0:38ceb79fef03 2116 0,
kevman 0:38ceb79fef03 2117 1,
kevman 0:38ceb79fef03 2118 &null_base_info
kevman 0:38ceb79fef03 2119 };
kevman 0:38ceb79fef03 2120 #endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
kevman 0:38ceb79fef03 2121
kevman 0:38ceb79fef03 2122 const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
kevman 0:38ceb79fef03 2123 {
kevman 0:38ceb79fef03 2124 #if defined(MBEDTLS_AES_C)
kevman 0:38ceb79fef03 2125 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
kevman 0:38ceb79fef03 2126 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
kevman 0:38ceb79fef03 2127 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
kevman 0:38ceb79fef03 2128 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 2129 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
kevman 0:38ceb79fef03 2130 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
kevman 0:38ceb79fef03 2131 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
kevman 0:38ceb79fef03 2132 #endif
kevman 0:38ceb79fef03 2133 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 2134 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
kevman 0:38ceb79fef03 2135 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
kevman 0:38ceb79fef03 2136 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
kevman 0:38ceb79fef03 2137 #endif
kevman 0:38ceb79fef03 2138 #if defined(MBEDTLS_CIPHER_MODE_OFB)
kevman 0:38ceb79fef03 2139 { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
kevman 0:38ceb79fef03 2140 { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
kevman 0:38ceb79fef03 2141 { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
kevman 0:38ceb79fef03 2142 #endif
kevman 0:38ceb79fef03 2143 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 2144 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
kevman 0:38ceb79fef03 2145 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
kevman 0:38ceb79fef03 2146 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
kevman 0:38ceb79fef03 2147 #endif
kevman 0:38ceb79fef03 2148 #if defined(MBEDTLS_CIPHER_MODE_XTS)
kevman 0:38ceb79fef03 2149 { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
kevman 0:38ceb79fef03 2150 { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
kevman 0:38ceb79fef03 2151 #endif
kevman 0:38ceb79fef03 2152 #if defined(MBEDTLS_GCM_C)
kevman 0:38ceb79fef03 2153 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
kevman 0:38ceb79fef03 2154 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
kevman 0:38ceb79fef03 2155 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
kevman 0:38ceb79fef03 2156 #endif
kevman 0:38ceb79fef03 2157 #if defined(MBEDTLS_CCM_C)
kevman 0:38ceb79fef03 2158 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
kevman 0:38ceb79fef03 2159 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
kevman 0:38ceb79fef03 2160 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
kevman 0:38ceb79fef03 2161 #endif
kevman 0:38ceb79fef03 2162 #endif /* MBEDTLS_AES_C */
kevman 0:38ceb79fef03 2163
kevman 0:38ceb79fef03 2164 #if defined(MBEDTLS_ARC4_C)
kevman 0:38ceb79fef03 2165 { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info },
kevman 0:38ceb79fef03 2166 #endif
kevman 0:38ceb79fef03 2167
kevman 0:38ceb79fef03 2168 #if defined(MBEDTLS_BLOWFISH_C)
kevman 0:38ceb79fef03 2169 { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info },
kevman 0:38ceb79fef03 2170 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 2171 { MBEDTLS_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info },
kevman 0:38ceb79fef03 2172 #endif
kevman 0:38ceb79fef03 2173 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 2174 { MBEDTLS_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info },
kevman 0:38ceb79fef03 2175 #endif
kevman 0:38ceb79fef03 2176 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 2177 { MBEDTLS_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info },
kevman 0:38ceb79fef03 2178 #endif
kevman 0:38ceb79fef03 2179 #endif /* MBEDTLS_BLOWFISH_C */
kevman 0:38ceb79fef03 2180
kevman 0:38ceb79fef03 2181 #if defined(MBEDTLS_CAMELLIA_C)
kevman 0:38ceb79fef03 2182 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
kevman 0:38ceb79fef03 2183 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
kevman 0:38ceb79fef03 2184 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
kevman 0:38ceb79fef03 2185 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 2186 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
kevman 0:38ceb79fef03 2187 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
kevman 0:38ceb79fef03 2188 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
kevman 0:38ceb79fef03 2189 #endif
kevman 0:38ceb79fef03 2190 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 2191 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
kevman 0:38ceb79fef03 2192 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
kevman 0:38ceb79fef03 2193 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
kevman 0:38ceb79fef03 2194 #endif
kevman 0:38ceb79fef03 2195 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 2196 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
kevman 0:38ceb79fef03 2197 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
kevman 0:38ceb79fef03 2198 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
kevman 0:38ceb79fef03 2199 #endif
kevman 0:38ceb79fef03 2200 #if defined(MBEDTLS_GCM_C)
kevman 0:38ceb79fef03 2201 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
kevman 0:38ceb79fef03 2202 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
kevman 0:38ceb79fef03 2203 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
kevman 0:38ceb79fef03 2204 #endif
kevman 0:38ceb79fef03 2205 #if defined(MBEDTLS_CCM_C)
kevman 0:38ceb79fef03 2206 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
kevman 0:38ceb79fef03 2207 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
kevman 0:38ceb79fef03 2208 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
kevman 0:38ceb79fef03 2209 #endif
kevman 0:38ceb79fef03 2210 #endif /* MBEDTLS_CAMELLIA_C */
kevman 0:38ceb79fef03 2211
kevman 0:38ceb79fef03 2212 #if defined(MBEDTLS_ARIA_C)
kevman 0:38ceb79fef03 2213 { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
kevman 0:38ceb79fef03 2214 { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
kevman 0:38ceb79fef03 2215 { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
kevman 0:38ceb79fef03 2216 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 2217 { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
kevman 0:38ceb79fef03 2218 { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
kevman 0:38ceb79fef03 2219 { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
kevman 0:38ceb79fef03 2220 #endif
kevman 0:38ceb79fef03 2221 #if defined(MBEDTLS_CIPHER_MODE_CFB)
kevman 0:38ceb79fef03 2222 { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
kevman 0:38ceb79fef03 2223 { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
kevman 0:38ceb79fef03 2224 { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
kevman 0:38ceb79fef03 2225 #endif
kevman 0:38ceb79fef03 2226 #if defined(MBEDTLS_CIPHER_MODE_CTR)
kevman 0:38ceb79fef03 2227 { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
kevman 0:38ceb79fef03 2228 { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
kevman 0:38ceb79fef03 2229 { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
kevman 0:38ceb79fef03 2230 #endif
kevman 0:38ceb79fef03 2231 #if defined(MBEDTLS_GCM_C)
kevman 0:38ceb79fef03 2232 { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
kevman 0:38ceb79fef03 2233 { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
kevman 0:38ceb79fef03 2234 { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
kevman 0:38ceb79fef03 2235 #endif
kevman 0:38ceb79fef03 2236 #if defined(MBEDTLS_CCM_C)
kevman 0:38ceb79fef03 2237 { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
kevman 0:38ceb79fef03 2238 { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
kevman 0:38ceb79fef03 2239 { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
kevman 0:38ceb79fef03 2240 #endif
kevman 0:38ceb79fef03 2241 #endif /* MBEDTLS_ARIA_C */
kevman 0:38ceb79fef03 2242
kevman 0:38ceb79fef03 2243 #if defined(MBEDTLS_DES_C)
kevman 0:38ceb79fef03 2244 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
kevman 0:38ceb79fef03 2245 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
kevman 0:38ceb79fef03 2246 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
kevman 0:38ceb79fef03 2247 #if defined(MBEDTLS_CIPHER_MODE_CBC)
kevman 0:38ceb79fef03 2248 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
kevman 0:38ceb79fef03 2249 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
kevman 0:38ceb79fef03 2250 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
kevman 0:38ceb79fef03 2251 #endif
kevman 0:38ceb79fef03 2252 #endif /* MBEDTLS_DES_C */
kevman 0:38ceb79fef03 2253
kevman 0:38ceb79fef03 2254 #if defined(MBEDTLS_CHACHA20_C)
kevman 0:38ceb79fef03 2255 { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
kevman 0:38ceb79fef03 2256 #endif
kevman 0:38ceb79fef03 2257
kevman 0:38ceb79fef03 2258 #if defined(MBEDTLS_CHACHAPOLY_C)
kevman 0:38ceb79fef03 2259 { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
kevman 0:38ceb79fef03 2260 #endif
kevman 0:38ceb79fef03 2261
kevman 0:38ceb79fef03 2262 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
kevman 0:38ceb79fef03 2263 { MBEDTLS_CIPHER_NULL, &null_cipher_info },
kevman 0:38ceb79fef03 2264 #endif /* MBEDTLS_CIPHER_NULL_CIPHER */
kevman 0:38ceb79fef03 2265
kevman 0:38ceb79fef03 2266 { MBEDTLS_CIPHER_NONE, NULL }
kevman 0:38ceb79fef03 2267 };
kevman 0:38ceb79fef03 2268
kevman 0:38ceb79fef03 2269 #define NUM_CIPHERS sizeof mbedtls_cipher_definitions / sizeof mbedtls_cipher_definitions[0]
kevman 0:38ceb79fef03 2270 int mbedtls_cipher_supported[NUM_CIPHERS];
kevman 0:38ceb79fef03 2271
kevman 0:38ceb79fef03 2272 #endif /* MBEDTLS_CIPHER_C */