Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbedtls by
cipher_wrap.c
00001 /** 00002 * \file cipher_wrap.c 00003 * 00004 * \brief Generic cipher wrapper for mbed TLS 00005 * 00006 * \author Adriaan de Jong <dejong@fox-it.com> 00007 * 00008 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved 00009 * SPDX-License-Identifier: Apache-2.0 00010 * 00011 * Licensed under the Apache License, Version 2.0 (the "License"); you may 00012 * not use this file except in compliance with the License. 00013 * You may obtain a copy of the License at 00014 * 00015 * http://www.apache.org/licenses/LICENSE-2.0 00016 * 00017 * Unless required by applicable law or agreed to in writing, software 00018 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00019 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00020 * See the License for the specific language governing permissions and 00021 * limitations under the License. 00022 * 00023 * This file is part of mbed TLS (https://tls.mbed.org) 00024 */ 00025 00026 #if !defined(MBEDTLS_CONFIG_FILE) 00027 #include "mbedtls/config.h" 00028 #else 00029 #include MBEDTLS_CONFIG_FILE 00030 #endif 00031 00032 #if defined(MBEDTLS_CIPHER_C) 00033 00034 #include "mbedtls/cipher_internal.h" 00035 00036 #if defined(MBEDTLS_AES_C) 00037 #include "mbedtls/aes.h" 00038 #endif 00039 00040 #if defined(MBEDTLS_ARC4_C) 00041 #include "mbedtls/arc4.h" 00042 #endif 00043 00044 #if defined(MBEDTLS_CAMELLIA_C) 00045 #include "mbedtls/camellia.h" 00046 #endif 00047 00048 #if defined(MBEDTLS_DES_C) 00049 #include "mbedtls/des.h" 00050 #endif 00051 00052 #if defined(MBEDTLS_BLOWFISH_C) 00053 #include "mbedtls/blowfish.h" 00054 #endif 00055 00056 #if defined(MBEDTLS_GCM_C) 00057 #include "mbedtls/gcm.h" 00058 #endif 00059 00060 #if defined(MBEDTLS_CCM_C) 00061 #include "mbedtls/ccm.h" 00062 #endif 00063 00064 #if defined(MBEDTLS_CIPHER_NULL_CIPHER) 00065 #include <string.h> 00066 #endif 00067 00068 #if defined(MBEDTLS_PLATFORM_C) 00069 #include "mbedtls/platform.h" 00070 #else 00071 #include <stdlib.h> 00072 #define mbedtls_calloc calloc 00073 #define mbedtls_free free 00074 #endif 00075 00076 #if defined(MBEDTLS_GCM_C) 00077 /* shared by all GCM ciphers */ 00078 static void *gcm_ctx_alloc( void ) 00079 { 00080 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) ); 00081 00082 if( ctx != NULL ) 00083 mbedtls_gcm_init( (mbedtls_gcm_context *) ctx ); 00084 00085 return( ctx ); 00086 } 00087 00088 static void gcm_ctx_free( void *ctx ) 00089 { 00090 mbedtls_gcm_free( ctx ); 00091 mbedtls_free( ctx ); 00092 } 00093 #endif /* MBEDTLS_GCM_C */ 00094 00095 #if defined(MBEDTLS_CCM_C) 00096 /* shared by all CCM ciphers */ 00097 static void *ccm_ctx_alloc( void ) 00098 { 00099 void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) ); 00100 00101 if( ctx != NULL ) 00102 mbedtls_ccm_init( (mbedtls_ccm_context *) ctx ); 00103 00104 return( ctx ); 00105 } 00106 00107 static void ccm_ctx_free( void *ctx ) 00108 { 00109 mbedtls_ccm_free( ctx ); 00110 mbedtls_free( ctx ); 00111 } 00112 #endif /* MBEDTLS_CCM_C */ 00113 00114 #if defined(MBEDTLS_AES_C) 00115 00116 static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, 00117 const unsigned char *input, unsigned char *output ) 00118 { 00119 return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output ); 00120 } 00121 00122 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00123 static int aes_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, 00124 unsigned char *iv, const unsigned char *input, unsigned char *output ) 00125 { 00126 return mbedtls_aes_crypt_cbc( (mbedtls_aes_context *) ctx, operation, length, iv, input, 00127 output ); 00128 } 00129 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 00130 00131 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00132 static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation, 00133 size_t length, size_t *iv_off, unsigned char *iv, 00134 const unsigned char *input, unsigned char *output ) 00135 { 00136 return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv, 00137 input, output ); 00138 } 00139 #endif /* MBEDTLS_CIPHER_MODE_CFB */ 00140 00141 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00142 static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, 00143 unsigned char *nonce_counter, unsigned char *stream_block, 00144 const unsigned char *input, unsigned char *output ) 00145 { 00146 return mbedtls_aes_crypt_ctr( (mbedtls_aes_context *) ctx, length, nc_off, nonce_counter, 00147 stream_block, input, output ); 00148 } 00149 #endif /* MBEDTLS_CIPHER_MODE_CTR */ 00150 00151 static int aes_setkey_dec_wrap( void *ctx, const unsigned char *key, 00152 unsigned int key_bitlen ) 00153 { 00154 return mbedtls_aes_setkey_dec( (mbedtls_aes_context *) ctx, key, key_bitlen ); 00155 } 00156 00157 static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key, 00158 unsigned int key_bitlen ) 00159 { 00160 return mbedtls_aes_setkey_enc( (mbedtls_aes_context *) ctx, key, key_bitlen ); 00161 } 00162 00163 static void * aes_ctx_alloc( void ) 00164 { 00165 mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) ); 00166 00167 if( aes == NULL ) 00168 return( NULL ); 00169 00170 mbedtls_aes_init( aes ); 00171 00172 return( aes ); 00173 } 00174 00175 static void aes_ctx_free( void *ctx ) 00176 { 00177 mbedtls_aes_free( (mbedtls_aes_context *) ctx ); 00178 mbedtls_free( ctx ); 00179 } 00180 00181 static const mbedtls_cipher_base_t aes_info = { 00182 MBEDTLS_CIPHER_ID_AES, 00183 aes_crypt_ecb_wrap, 00184 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00185 aes_crypt_cbc_wrap, 00186 #endif 00187 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00188 aes_crypt_cfb128_wrap, 00189 #endif 00190 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00191 aes_crypt_ctr_wrap, 00192 #endif 00193 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 00194 NULL, 00195 #endif 00196 aes_setkey_enc_wrap, 00197 aes_setkey_dec_wrap, 00198 aes_ctx_alloc, 00199 aes_ctx_free 00200 }; 00201 00202 static const mbedtls_cipher_info_t aes_128_ecb_info = { 00203 MBEDTLS_CIPHER_AES_128_ECB, 00204 MBEDTLS_MODE_ECB, 00205 128, 00206 "AES-128-ECB", 00207 16, 00208 0, 00209 16, 00210 &aes_info 00211 }; 00212 00213 static const mbedtls_cipher_info_t aes_192_ecb_info = { 00214 MBEDTLS_CIPHER_AES_192_ECB, 00215 MBEDTLS_MODE_ECB, 00216 192, 00217 "AES-192-ECB", 00218 16, 00219 0, 00220 16, 00221 &aes_info 00222 }; 00223 00224 static const mbedtls_cipher_info_t aes_256_ecb_info = { 00225 MBEDTLS_CIPHER_AES_256_ECB, 00226 MBEDTLS_MODE_ECB, 00227 256, 00228 "AES-256-ECB", 00229 16, 00230 0, 00231 16, 00232 &aes_info 00233 }; 00234 00235 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00236 static const mbedtls_cipher_info_t aes_128_cbc_info = { 00237 MBEDTLS_CIPHER_AES_128_CBC, 00238 MBEDTLS_MODE_CBC, 00239 128, 00240 "AES-128-CBC", 00241 16, 00242 0, 00243 16, 00244 &aes_info 00245 }; 00246 00247 static const mbedtls_cipher_info_t aes_192_cbc_info = { 00248 MBEDTLS_CIPHER_AES_192_CBC, 00249 MBEDTLS_MODE_CBC, 00250 192, 00251 "AES-192-CBC", 00252 16, 00253 0, 00254 16, 00255 &aes_info 00256 }; 00257 00258 static const mbedtls_cipher_info_t aes_256_cbc_info = { 00259 MBEDTLS_CIPHER_AES_256_CBC, 00260 MBEDTLS_MODE_CBC, 00261 256, 00262 "AES-256-CBC", 00263 16, 00264 0, 00265 16, 00266 &aes_info 00267 }; 00268 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 00269 00270 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00271 static const mbedtls_cipher_info_t aes_128_cfb128_info = { 00272 MBEDTLS_CIPHER_AES_128_CFB128, 00273 MBEDTLS_MODE_CFB, 00274 128, 00275 "AES-128-CFB128", 00276 16, 00277 0, 00278 16, 00279 &aes_info 00280 }; 00281 00282 static const mbedtls_cipher_info_t aes_192_cfb128_info = { 00283 MBEDTLS_CIPHER_AES_192_CFB128, 00284 MBEDTLS_MODE_CFB, 00285 192, 00286 "AES-192-CFB128", 00287 16, 00288 0, 00289 16, 00290 &aes_info 00291 }; 00292 00293 static const mbedtls_cipher_info_t aes_256_cfb128_info = { 00294 MBEDTLS_CIPHER_AES_256_CFB128, 00295 MBEDTLS_MODE_CFB, 00296 256, 00297 "AES-256-CFB128", 00298 16, 00299 0, 00300 16, 00301 &aes_info 00302 }; 00303 #endif /* MBEDTLS_CIPHER_MODE_CFB */ 00304 00305 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00306 static const mbedtls_cipher_info_t aes_128_ctr_info = { 00307 MBEDTLS_CIPHER_AES_128_CTR, 00308 MBEDTLS_MODE_CTR, 00309 128, 00310 "AES-128-CTR", 00311 16, 00312 0, 00313 16, 00314 &aes_info 00315 }; 00316 00317 static const mbedtls_cipher_info_t aes_192_ctr_info = { 00318 MBEDTLS_CIPHER_AES_192_CTR, 00319 MBEDTLS_MODE_CTR, 00320 192, 00321 "AES-192-CTR", 00322 16, 00323 0, 00324 16, 00325 &aes_info 00326 }; 00327 00328 static const mbedtls_cipher_info_t aes_256_ctr_info = { 00329 MBEDTLS_CIPHER_AES_256_CTR, 00330 MBEDTLS_MODE_CTR, 00331 256, 00332 "AES-256-CTR", 00333 16, 00334 0, 00335 16, 00336 &aes_info 00337 }; 00338 #endif /* MBEDTLS_CIPHER_MODE_CTR */ 00339 00340 #if defined(MBEDTLS_GCM_C) 00341 static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key, 00342 unsigned int key_bitlen ) 00343 { 00344 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES, 00345 key, key_bitlen ); 00346 } 00347 00348 static const mbedtls_cipher_base_t gcm_aes_info = { 00349 MBEDTLS_CIPHER_ID_AES, 00350 NULL, 00351 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00352 NULL, 00353 #endif 00354 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00355 NULL, 00356 #endif 00357 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00358 NULL, 00359 #endif 00360 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 00361 NULL, 00362 #endif 00363 gcm_aes_setkey_wrap, 00364 gcm_aes_setkey_wrap, 00365 gcm_ctx_alloc, 00366 gcm_ctx_free, 00367 }; 00368 00369 static const mbedtls_cipher_info_t aes_128_gcm_info = { 00370 MBEDTLS_CIPHER_AES_128_GCM, 00371 MBEDTLS_MODE_GCM, 00372 128, 00373 "AES-128-GCM", 00374 12, 00375 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00376 16, 00377 &gcm_aes_info 00378 }; 00379 00380 static const mbedtls_cipher_info_t aes_192_gcm_info = { 00381 MBEDTLS_CIPHER_AES_192_GCM, 00382 MBEDTLS_MODE_GCM, 00383 192, 00384 "AES-192-GCM", 00385 12, 00386 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00387 16, 00388 &gcm_aes_info 00389 }; 00390 00391 static const mbedtls_cipher_info_t aes_256_gcm_info = { 00392 MBEDTLS_CIPHER_AES_256_GCM, 00393 MBEDTLS_MODE_GCM, 00394 256, 00395 "AES-256-GCM", 00396 12, 00397 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00398 16, 00399 &gcm_aes_info 00400 }; 00401 #endif /* MBEDTLS_GCM_C */ 00402 00403 #if defined(MBEDTLS_CCM_C) 00404 static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key, 00405 unsigned int key_bitlen ) 00406 { 00407 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES, 00408 key, key_bitlen ); 00409 } 00410 00411 static const mbedtls_cipher_base_t ccm_aes_info = { 00412 MBEDTLS_CIPHER_ID_AES, 00413 NULL, 00414 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00415 NULL, 00416 #endif 00417 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00418 NULL, 00419 #endif 00420 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00421 NULL, 00422 #endif 00423 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 00424 NULL, 00425 #endif 00426 ccm_aes_setkey_wrap, 00427 ccm_aes_setkey_wrap, 00428 ccm_ctx_alloc, 00429 ccm_ctx_free, 00430 }; 00431 00432 static const mbedtls_cipher_info_t aes_128_ccm_info = { 00433 MBEDTLS_CIPHER_AES_128_CCM, 00434 MBEDTLS_MODE_CCM, 00435 128, 00436 "AES-128-CCM", 00437 12, 00438 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00439 16, 00440 &ccm_aes_info 00441 }; 00442 00443 static const mbedtls_cipher_info_t aes_192_ccm_info = { 00444 MBEDTLS_CIPHER_AES_192_CCM, 00445 MBEDTLS_MODE_CCM, 00446 192, 00447 "AES-192-CCM", 00448 12, 00449 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00450 16, 00451 &ccm_aes_info 00452 }; 00453 00454 static const mbedtls_cipher_info_t aes_256_ccm_info = { 00455 MBEDTLS_CIPHER_AES_256_CCM, 00456 MBEDTLS_MODE_CCM, 00457 256, 00458 "AES-256-CCM", 00459 12, 00460 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00461 16, 00462 &ccm_aes_info 00463 }; 00464 #endif /* MBEDTLS_CCM_C */ 00465 00466 #endif /* MBEDTLS_AES_C */ 00467 00468 #if defined(MBEDTLS_CAMELLIA_C) 00469 00470 static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, 00471 const unsigned char *input, unsigned char *output ) 00472 { 00473 return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input, 00474 output ); 00475 } 00476 00477 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00478 static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, 00479 size_t length, unsigned char *iv, 00480 const unsigned char *input, unsigned char *output ) 00481 { 00482 return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv, 00483 input, output ); 00484 } 00485 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 00486 00487 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00488 static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation, 00489 size_t length, size_t *iv_off, unsigned char *iv, 00490 const unsigned char *input, unsigned char *output ) 00491 { 00492 return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length, 00493 iv_off, iv, input, output ); 00494 } 00495 #endif /* MBEDTLS_CIPHER_MODE_CFB */ 00496 00497 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00498 static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, 00499 unsigned char *nonce_counter, unsigned char *stream_block, 00500 const unsigned char *input, unsigned char *output ) 00501 { 00502 return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off, 00503 nonce_counter, stream_block, input, output ); 00504 } 00505 #endif /* MBEDTLS_CIPHER_MODE_CTR */ 00506 00507 static int camellia_setkey_dec_wrap( void *ctx, const unsigned char *key, 00508 unsigned int key_bitlen ) 00509 { 00510 return mbedtls_camellia_setkey_dec( (mbedtls_camellia_context *) ctx, key, key_bitlen ); 00511 } 00512 00513 static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key, 00514 unsigned int key_bitlen ) 00515 { 00516 return mbedtls_camellia_setkey_enc( (mbedtls_camellia_context *) ctx, key, key_bitlen ); 00517 } 00518 00519 static void * camellia_ctx_alloc( void ) 00520 { 00521 mbedtls_camellia_context *ctx; 00522 ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) ); 00523 00524 if( ctx == NULL ) 00525 return( NULL ); 00526 00527 mbedtls_camellia_init( ctx ); 00528 00529 return( ctx ); 00530 } 00531 00532 static void camellia_ctx_free( void *ctx ) 00533 { 00534 mbedtls_camellia_free( (mbedtls_camellia_context *) ctx ); 00535 mbedtls_free( ctx ); 00536 } 00537 00538 static const mbedtls_cipher_base_t camellia_info = { 00539 MBEDTLS_CIPHER_ID_CAMELLIA, 00540 camellia_crypt_ecb_wrap, 00541 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00542 camellia_crypt_cbc_wrap, 00543 #endif 00544 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00545 camellia_crypt_cfb128_wrap, 00546 #endif 00547 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00548 camellia_crypt_ctr_wrap, 00549 #endif 00550 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 00551 NULL, 00552 #endif 00553 camellia_setkey_enc_wrap, 00554 camellia_setkey_dec_wrap, 00555 camellia_ctx_alloc, 00556 camellia_ctx_free 00557 }; 00558 00559 static const mbedtls_cipher_info_t camellia_128_ecb_info = { 00560 MBEDTLS_CIPHER_CAMELLIA_128_ECB, 00561 MBEDTLS_MODE_ECB, 00562 128, 00563 "CAMELLIA-128-ECB", 00564 16, 00565 0, 00566 16, 00567 &camellia_info 00568 }; 00569 00570 static const mbedtls_cipher_info_t camellia_192_ecb_info = { 00571 MBEDTLS_CIPHER_CAMELLIA_192_ECB, 00572 MBEDTLS_MODE_ECB, 00573 192, 00574 "CAMELLIA-192-ECB", 00575 16, 00576 0, 00577 16, 00578 &camellia_info 00579 }; 00580 00581 static const mbedtls_cipher_info_t camellia_256_ecb_info = { 00582 MBEDTLS_CIPHER_CAMELLIA_256_ECB, 00583 MBEDTLS_MODE_ECB, 00584 256, 00585 "CAMELLIA-256-ECB", 00586 16, 00587 0, 00588 16, 00589 &camellia_info 00590 }; 00591 00592 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00593 static const mbedtls_cipher_info_t camellia_128_cbc_info = { 00594 MBEDTLS_CIPHER_CAMELLIA_128_CBC, 00595 MBEDTLS_MODE_CBC, 00596 128, 00597 "CAMELLIA-128-CBC", 00598 16, 00599 0, 00600 16, 00601 &camellia_info 00602 }; 00603 00604 static const mbedtls_cipher_info_t camellia_192_cbc_info = { 00605 MBEDTLS_CIPHER_CAMELLIA_192_CBC, 00606 MBEDTLS_MODE_CBC, 00607 192, 00608 "CAMELLIA-192-CBC", 00609 16, 00610 0, 00611 16, 00612 &camellia_info 00613 }; 00614 00615 static const mbedtls_cipher_info_t camellia_256_cbc_info = { 00616 MBEDTLS_CIPHER_CAMELLIA_256_CBC, 00617 MBEDTLS_MODE_CBC, 00618 256, 00619 "CAMELLIA-256-CBC", 00620 16, 00621 0, 00622 16, 00623 &camellia_info 00624 }; 00625 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 00626 00627 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00628 static const mbedtls_cipher_info_t camellia_128_cfb128_info = { 00629 MBEDTLS_CIPHER_CAMELLIA_128_CFB128, 00630 MBEDTLS_MODE_CFB, 00631 128, 00632 "CAMELLIA-128-CFB128", 00633 16, 00634 0, 00635 16, 00636 &camellia_info 00637 }; 00638 00639 static const mbedtls_cipher_info_t camellia_192_cfb128_info = { 00640 MBEDTLS_CIPHER_CAMELLIA_192_CFB128, 00641 MBEDTLS_MODE_CFB, 00642 192, 00643 "CAMELLIA-192-CFB128", 00644 16, 00645 0, 00646 16, 00647 &camellia_info 00648 }; 00649 00650 static const mbedtls_cipher_info_t camellia_256_cfb128_info = { 00651 MBEDTLS_CIPHER_CAMELLIA_256_CFB128, 00652 MBEDTLS_MODE_CFB, 00653 256, 00654 "CAMELLIA-256-CFB128", 00655 16, 00656 0, 00657 16, 00658 &camellia_info 00659 }; 00660 #endif /* MBEDTLS_CIPHER_MODE_CFB */ 00661 00662 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00663 static const mbedtls_cipher_info_t camellia_128_ctr_info = { 00664 MBEDTLS_CIPHER_CAMELLIA_128_CTR, 00665 MBEDTLS_MODE_CTR, 00666 128, 00667 "CAMELLIA-128-CTR", 00668 16, 00669 0, 00670 16, 00671 &camellia_info 00672 }; 00673 00674 static const mbedtls_cipher_info_t camellia_192_ctr_info = { 00675 MBEDTLS_CIPHER_CAMELLIA_192_CTR, 00676 MBEDTLS_MODE_CTR, 00677 192, 00678 "CAMELLIA-192-CTR", 00679 16, 00680 0, 00681 16, 00682 &camellia_info 00683 }; 00684 00685 static const mbedtls_cipher_info_t camellia_256_ctr_info = { 00686 MBEDTLS_CIPHER_CAMELLIA_256_CTR, 00687 MBEDTLS_MODE_CTR, 00688 256, 00689 "CAMELLIA-256-CTR", 00690 16, 00691 0, 00692 16, 00693 &camellia_info 00694 }; 00695 #endif /* MBEDTLS_CIPHER_MODE_CTR */ 00696 00697 #if defined(MBEDTLS_GCM_C) 00698 static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key, 00699 unsigned int key_bitlen ) 00700 { 00701 return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA, 00702 key, key_bitlen ); 00703 } 00704 00705 static const mbedtls_cipher_base_t gcm_camellia_info = { 00706 MBEDTLS_CIPHER_ID_CAMELLIA, 00707 NULL, 00708 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00709 NULL, 00710 #endif 00711 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00712 NULL, 00713 #endif 00714 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00715 NULL, 00716 #endif 00717 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 00718 NULL, 00719 #endif 00720 gcm_camellia_setkey_wrap, 00721 gcm_camellia_setkey_wrap, 00722 gcm_ctx_alloc, 00723 gcm_ctx_free, 00724 }; 00725 00726 static const mbedtls_cipher_info_t camellia_128_gcm_info = { 00727 MBEDTLS_CIPHER_CAMELLIA_128_GCM, 00728 MBEDTLS_MODE_GCM, 00729 128, 00730 "CAMELLIA-128-GCM", 00731 12, 00732 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00733 16, 00734 &gcm_camellia_info 00735 }; 00736 00737 static const mbedtls_cipher_info_t camellia_192_gcm_info = { 00738 MBEDTLS_CIPHER_CAMELLIA_192_GCM, 00739 MBEDTLS_MODE_GCM, 00740 192, 00741 "CAMELLIA-192-GCM", 00742 12, 00743 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00744 16, 00745 &gcm_camellia_info 00746 }; 00747 00748 static const mbedtls_cipher_info_t camellia_256_gcm_info = { 00749 MBEDTLS_CIPHER_CAMELLIA_256_GCM, 00750 MBEDTLS_MODE_GCM, 00751 256, 00752 "CAMELLIA-256-GCM", 00753 12, 00754 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00755 16, 00756 &gcm_camellia_info 00757 }; 00758 #endif /* MBEDTLS_GCM_C */ 00759 00760 #if defined(MBEDTLS_CCM_C) 00761 static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key, 00762 unsigned int key_bitlen ) 00763 { 00764 return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA, 00765 key, key_bitlen ); 00766 } 00767 00768 static const mbedtls_cipher_base_t ccm_camellia_info = { 00769 MBEDTLS_CIPHER_ID_CAMELLIA, 00770 NULL, 00771 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00772 NULL, 00773 #endif 00774 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00775 NULL, 00776 #endif 00777 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00778 NULL, 00779 #endif 00780 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 00781 NULL, 00782 #endif 00783 ccm_camellia_setkey_wrap, 00784 ccm_camellia_setkey_wrap, 00785 ccm_ctx_alloc, 00786 ccm_ctx_free, 00787 }; 00788 00789 static const mbedtls_cipher_info_t camellia_128_ccm_info = { 00790 MBEDTLS_CIPHER_CAMELLIA_128_CCM, 00791 MBEDTLS_MODE_CCM, 00792 128, 00793 "CAMELLIA-128-CCM", 00794 12, 00795 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00796 16, 00797 &ccm_camellia_info 00798 }; 00799 00800 static const mbedtls_cipher_info_t camellia_192_ccm_info = { 00801 MBEDTLS_CIPHER_CAMELLIA_192_CCM, 00802 MBEDTLS_MODE_CCM, 00803 192, 00804 "CAMELLIA-192-CCM", 00805 12, 00806 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00807 16, 00808 &ccm_camellia_info 00809 }; 00810 00811 static const mbedtls_cipher_info_t camellia_256_ccm_info = { 00812 MBEDTLS_CIPHER_CAMELLIA_256_CCM, 00813 MBEDTLS_MODE_CCM, 00814 256, 00815 "CAMELLIA-256-CCM", 00816 12, 00817 MBEDTLS_CIPHER_VARIABLE_IV_LEN, 00818 16, 00819 &ccm_camellia_info 00820 }; 00821 #endif /* MBEDTLS_CCM_C */ 00822 00823 #endif /* MBEDTLS_CAMELLIA_C */ 00824 00825 #if defined(MBEDTLS_DES_C) 00826 00827 static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, 00828 const unsigned char *input, unsigned char *output ) 00829 { 00830 ((void) operation); 00831 return mbedtls_des_crypt_ecb( (mbedtls_des_context *) ctx, input, output ); 00832 } 00833 00834 static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, 00835 const unsigned char *input, unsigned char *output ) 00836 { 00837 ((void) operation); 00838 return mbedtls_des3_crypt_ecb( (mbedtls_des3_context *) ctx, input, output ); 00839 } 00840 00841 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00842 static int des_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, 00843 unsigned char *iv, const unsigned char *input, unsigned char *output ) 00844 { 00845 return mbedtls_des_crypt_cbc( (mbedtls_des_context *) ctx, operation, length, iv, input, 00846 output ); 00847 } 00848 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 00849 00850 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00851 static int des3_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, 00852 unsigned char *iv, const unsigned char *input, unsigned char *output ) 00853 { 00854 return mbedtls_des3_crypt_cbc( (mbedtls_des3_context *) ctx, operation, length, iv, input, 00855 output ); 00856 } 00857 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 00858 00859 static int des_setkey_dec_wrap( void *ctx, const unsigned char *key, 00860 unsigned int key_bitlen ) 00861 { 00862 ((void) key_bitlen); 00863 00864 return mbedtls_des_setkey_dec( (mbedtls_des_context *) ctx, key ); 00865 } 00866 00867 static int des_setkey_enc_wrap( void *ctx, const unsigned char *key, 00868 unsigned int key_bitlen ) 00869 { 00870 ((void) key_bitlen); 00871 00872 return mbedtls_des_setkey_enc( (mbedtls_des_context *) ctx, key ); 00873 } 00874 00875 static int des3_set2key_dec_wrap( void *ctx, const unsigned char *key, 00876 unsigned int key_bitlen ) 00877 { 00878 ((void) key_bitlen); 00879 00880 return mbedtls_des3_set2key_dec( (mbedtls_des3_context *) ctx, key ); 00881 } 00882 00883 static int des3_set2key_enc_wrap( void *ctx, const unsigned char *key, 00884 unsigned int key_bitlen ) 00885 { 00886 ((void) key_bitlen); 00887 00888 return mbedtls_des3_set2key_enc( (mbedtls_des3_context *) ctx, key ); 00889 } 00890 00891 static int des3_set3key_dec_wrap( void *ctx, const unsigned char *key, 00892 unsigned int key_bitlen ) 00893 { 00894 ((void) key_bitlen); 00895 00896 return mbedtls_des3_set3key_dec( (mbedtls_des3_context *) ctx, key ); 00897 } 00898 00899 static int des3_set3key_enc_wrap( void *ctx, const unsigned char *key, 00900 unsigned int key_bitlen ) 00901 { 00902 ((void) key_bitlen); 00903 00904 return mbedtls_des3_set3key_enc( (mbedtls_des3_context *) ctx, key ); 00905 } 00906 00907 static void * des_ctx_alloc( void ) 00908 { 00909 mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) ); 00910 00911 if( des == NULL ) 00912 return( NULL ); 00913 00914 mbedtls_des_init( des ); 00915 00916 return( des ); 00917 } 00918 00919 static void des_ctx_free( void *ctx ) 00920 { 00921 mbedtls_des_free( (mbedtls_des_context *) ctx ); 00922 mbedtls_free( ctx ); 00923 } 00924 00925 static void * des3_ctx_alloc( void ) 00926 { 00927 mbedtls_des3_context *des3; 00928 des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) ); 00929 00930 if( des3 == NULL ) 00931 return( NULL ); 00932 00933 mbedtls_des3_init( des3 ); 00934 00935 return( des3 ); 00936 } 00937 00938 static void des3_ctx_free( void *ctx ) 00939 { 00940 mbedtls_des3_free( (mbedtls_des3_context *) ctx ); 00941 mbedtls_free( ctx ); 00942 } 00943 00944 static const mbedtls_cipher_base_t des_info = { 00945 MBEDTLS_CIPHER_ID_DES, 00946 des_crypt_ecb_wrap, 00947 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00948 des_crypt_cbc_wrap, 00949 #endif 00950 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00951 NULL, 00952 #endif 00953 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00954 NULL, 00955 #endif 00956 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 00957 NULL, 00958 #endif 00959 des_setkey_enc_wrap, 00960 des_setkey_dec_wrap, 00961 des_ctx_alloc, 00962 des_ctx_free 00963 }; 00964 00965 static const mbedtls_cipher_info_t des_ecb_info = { 00966 MBEDTLS_CIPHER_DES_ECB, 00967 MBEDTLS_MODE_ECB, 00968 MBEDTLS_KEY_LENGTH_DES, 00969 "DES-ECB", 00970 8, 00971 0, 00972 8, 00973 &des_info 00974 }; 00975 00976 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00977 static const mbedtls_cipher_info_t des_cbc_info = { 00978 MBEDTLS_CIPHER_DES_CBC, 00979 MBEDTLS_MODE_CBC, 00980 MBEDTLS_KEY_LENGTH_DES, 00981 "DES-CBC", 00982 8, 00983 0, 00984 8, 00985 &des_info 00986 }; 00987 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 00988 00989 static const mbedtls_cipher_base_t des_ede_info = { 00990 MBEDTLS_CIPHER_ID_DES, 00991 des3_crypt_ecb_wrap, 00992 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00993 des3_crypt_cbc_wrap, 00994 #endif 00995 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00996 NULL, 00997 #endif 00998 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00999 NULL, 01000 #endif 01001 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 01002 NULL, 01003 #endif 01004 des3_set2key_enc_wrap, 01005 des3_set2key_dec_wrap, 01006 des3_ctx_alloc, 01007 des3_ctx_free 01008 }; 01009 01010 static const mbedtls_cipher_info_t des_ede_ecb_info = { 01011 MBEDTLS_CIPHER_DES_EDE_ECB, 01012 MBEDTLS_MODE_ECB, 01013 MBEDTLS_KEY_LENGTH_DES_EDE, 01014 "DES-EDE-ECB", 01015 8, 01016 0, 01017 8, 01018 &des_ede_info 01019 }; 01020 01021 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01022 static const mbedtls_cipher_info_t des_ede_cbc_info = { 01023 MBEDTLS_CIPHER_DES_EDE_CBC, 01024 MBEDTLS_MODE_CBC, 01025 MBEDTLS_KEY_LENGTH_DES_EDE, 01026 "DES-EDE-CBC", 01027 8, 01028 0, 01029 8, 01030 &des_ede_info 01031 }; 01032 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 01033 01034 static const mbedtls_cipher_base_t des_ede3_info = { 01035 MBEDTLS_CIPHER_ID_3DES, 01036 des3_crypt_ecb_wrap, 01037 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01038 des3_crypt_cbc_wrap, 01039 #endif 01040 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01041 NULL, 01042 #endif 01043 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01044 NULL, 01045 #endif 01046 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 01047 NULL, 01048 #endif 01049 des3_set3key_enc_wrap, 01050 des3_set3key_dec_wrap, 01051 des3_ctx_alloc, 01052 des3_ctx_free 01053 }; 01054 01055 static const mbedtls_cipher_info_t des_ede3_ecb_info = { 01056 MBEDTLS_CIPHER_DES_EDE3_ECB, 01057 MBEDTLS_MODE_ECB, 01058 MBEDTLS_KEY_LENGTH_DES_EDE3, 01059 "DES-EDE3-ECB", 01060 8, 01061 0, 01062 8, 01063 &des_ede3_info 01064 }; 01065 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01066 static const mbedtls_cipher_info_t des_ede3_cbc_info = { 01067 MBEDTLS_CIPHER_DES_EDE3_CBC, 01068 MBEDTLS_MODE_CBC, 01069 MBEDTLS_KEY_LENGTH_DES_EDE3, 01070 "DES-EDE3-CBC", 01071 8, 01072 0, 01073 8, 01074 &des_ede3_info 01075 }; 01076 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 01077 #endif /* MBEDTLS_DES_C */ 01078 01079 #if defined(MBEDTLS_BLOWFISH_C) 01080 01081 static int blowfish_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, 01082 const unsigned char *input, unsigned char *output ) 01083 { 01084 return mbedtls_blowfish_crypt_ecb( (mbedtls_blowfish_context *) ctx, operation, input, 01085 output ); 01086 } 01087 01088 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01089 static int blowfish_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, 01090 size_t length, unsigned char *iv, const unsigned char *input, 01091 unsigned char *output ) 01092 { 01093 return mbedtls_blowfish_crypt_cbc( (mbedtls_blowfish_context *) ctx, operation, length, iv, 01094 input, output ); 01095 } 01096 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 01097 01098 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01099 static int blowfish_crypt_cfb64_wrap( void *ctx, mbedtls_operation_t operation, 01100 size_t length, size_t *iv_off, unsigned char *iv, 01101 const unsigned char *input, unsigned char *output ) 01102 { 01103 return mbedtls_blowfish_crypt_cfb64( (mbedtls_blowfish_context *) ctx, operation, length, 01104 iv_off, iv, input, output ); 01105 } 01106 #endif /* MBEDTLS_CIPHER_MODE_CFB */ 01107 01108 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01109 static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, 01110 unsigned char *nonce_counter, unsigned char *stream_block, 01111 const unsigned char *input, unsigned char *output ) 01112 { 01113 return mbedtls_blowfish_crypt_ctr( (mbedtls_blowfish_context *) ctx, length, nc_off, 01114 nonce_counter, stream_block, input, output ); 01115 } 01116 #endif /* MBEDTLS_CIPHER_MODE_CTR */ 01117 01118 static int blowfish_setkey_wrap( void *ctx, const unsigned char *key, 01119 unsigned int key_bitlen ) 01120 { 01121 return mbedtls_blowfish_setkey( (mbedtls_blowfish_context *) ctx, key, key_bitlen ); 01122 } 01123 01124 static void * blowfish_ctx_alloc( void ) 01125 { 01126 mbedtls_blowfish_context *ctx; 01127 ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) ); 01128 01129 if( ctx == NULL ) 01130 return( NULL ); 01131 01132 mbedtls_blowfish_init( ctx ); 01133 01134 return( ctx ); 01135 } 01136 01137 static void blowfish_ctx_free( void *ctx ) 01138 { 01139 mbedtls_blowfish_free( (mbedtls_blowfish_context *) ctx ); 01140 mbedtls_free( ctx ); 01141 } 01142 01143 static const mbedtls_cipher_base_t blowfish_info = { 01144 MBEDTLS_CIPHER_ID_BLOWFISH, 01145 blowfish_crypt_ecb_wrap, 01146 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01147 blowfish_crypt_cbc_wrap, 01148 #endif 01149 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01150 blowfish_crypt_cfb64_wrap, 01151 #endif 01152 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01153 blowfish_crypt_ctr_wrap, 01154 #endif 01155 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 01156 NULL, 01157 #endif 01158 blowfish_setkey_wrap, 01159 blowfish_setkey_wrap, 01160 blowfish_ctx_alloc, 01161 blowfish_ctx_free 01162 }; 01163 01164 static const mbedtls_cipher_info_t blowfish_ecb_info = { 01165 MBEDTLS_CIPHER_BLOWFISH_ECB, 01166 MBEDTLS_MODE_ECB, 01167 128, 01168 "BLOWFISH-ECB", 01169 8, 01170 MBEDTLS_CIPHER_VARIABLE_KEY_LEN, 01171 8, 01172 &blowfish_info 01173 }; 01174 01175 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01176 static const mbedtls_cipher_info_t blowfish_cbc_info = { 01177 MBEDTLS_CIPHER_BLOWFISH_CBC, 01178 MBEDTLS_MODE_CBC, 01179 128, 01180 "BLOWFISH-CBC", 01181 8, 01182 MBEDTLS_CIPHER_VARIABLE_KEY_LEN, 01183 8, 01184 &blowfish_info 01185 }; 01186 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 01187 01188 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01189 static const mbedtls_cipher_info_t blowfish_cfb64_info = { 01190 MBEDTLS_CIPHER_BLOWFISH_CFB64, 01191 MBEDTLS_MODE_CFB, 01192 128, 01193 "BLOWFISH-CFB64", 01194 8, 01195 MBEDTLS_CIPHER_VARIABLE_KEY_LEN, 01196 8, 01197 &blowfish_info 01198 }; 01199 #endif /* MBEDTLS_CIPHER_MODE_CFB */ 01200 01201 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01202 static const mbedtls_cipher_info_t blowfish_ctr_info = { 01203 MBEDTLS_CIPHER_BLOWFISH_CTR, 01204 MBEDTLS_MODE_CTR, 01205 128, 01206 "BLOWFISH-CTR", 01207 8, 01208 MBEDTLS_CIPHER_VARIABLE_KEY_LEN, 01209 8, 01210 &blowfish_info 01211 }; 01212 #endif /* MBEDTLS_CIPHER_MODE_CTR */ 01213 #endif /* MBEDTLS_BLOWFISH_C */ 01214 01215 #if defined(MBEDTLS_ARC4_C) 01216 static int arc4_crypt_stream_wrap( void *ctx, size_t length, 01217 const unsigned char *input, 01218 unsigned char *output ) 01219 { 01220 return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) ); 01221 } 01222 01223 static int arc4_setkey_wrap( void *ctx, const unsigned char *key, 01224 unsigned int key_bitlen ) 01225 { 01226 /* we get key_bitlen in bits, arc4 expects it in bytes */ 01227 if( key_bitlen % 8 != 0 ) 01228 return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); 01229 01230 mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 ); 01231 return( 0 ); 01232 } 01233 01234 static void * arc4_ctx_alloc( void ) 01235 { 01236 mbedtls_arc4_context *ctx; 01237 ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) ); 01238 01239 if( ctx == NULL ) 01240 return( NULL ); 01241 01242 mbedtls_arc4_init( ctx ); 01243 01244 return( ctx ); 01245 } 01246 01247 static void arc4_ctx_free( void *ctx ) 01248 { 01249 mbedtls_arc4_free( (mbedtls_arc4_context *) ctx ); 01250 mbedtls_free( ctx ); 01251 } 01252 01253 static const mbedtls_cipher_base_t arc4_base_info = { 01254 MBEDTLS_CIPHER_ID_ARC4, 01255 NULL, 01256 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01257 NULL, 01258 #endif 01259 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01260 NULL, 01261 #endif 01262 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01263 NULL, 01264 #endif 01265 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 01266 arc4_crypt_stream_wrap, 01267 #endif 01268 arc4_setkey_wrap, 01269 arc4_setkey_wrap, 01270 arc4_ctx_alloc, 01271 arc4_ctx_free 01272 }; 01273 01274 static const mbedtls_cipher_info_t arc4_128_info = { 01275 MBEDTLS_CIPHER_ARC4_128, 01276 MBEDTLS_MODE_STREAM, 01277 128, 01278 "ARC4-128", 01279 0, 01280 0, 01281 1, 01282 &arc4_base_info 01283 }; 01284 #endif /* MBEDTLS_ARC4_C */ 01285 01286 #if defined(MBEDTLS_CIPHER_NULL_CIPHER) 01287 static int null_crypt_stream( void *ctx, size_t length, 01288 const unsigned char *input, 01289 unsigned char *output ) 01290 { 01291 ((void) ctx); 01292 memmove( output, input, length ); 01293 return( 0 ); 01294 } 01295 01296 static int null_setkey( void *ctx, const unsigned char *key, 01297 unsigned int key_bitlen ) 01298 { 01299 ((void) ctx); 01300 ((void) key); 01301 ((void) key_bitlen); 01302 01303 return( 0 ); 01304 } 01305 01306 static void * null_ctx_alloc( void ) 01307 { 01308 return( (void *) 1 ); 01309 } 01310 01311 static void null_ctx_free( void *ctx ) 01312 { 01313 ((void) ctx); 01314 } 01315 01316 static const mbedtls_cipher_base_t null_base_info = { 01317 MBEDTLS_CIPHER_ID_NULL, 01318 NULL, 01319 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01320 NULL, 01321 #endif 01322 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01323 NULL, 01324 #endif 01325 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01326 NULL, 01327 #endif 01328 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 01329 null_crypt_stream, 01330 #endif 01331 null_setkey, 01332 null_setkey, 01333 null_ctx_alloc, 01334 null_ctx_free 01335 }; 01336 01337 static const mbedtls_cipher_info_t null_cipher_info = { 01338 MBEDTLS_CIPHER_NULL, 01339 MBEDTLS_MODE_STREAM, 01340 0, 01341 "NULL", 01342 0, 01343 0, 01344 1, 01345 &null_base_info 01346 }; 01347 #endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */ 01348 01349 const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = 01350 { 01351 #if defined(MBEDTLS_AES_C) 01352 { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info }, 01353 { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info }, 01354 { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info }, 01355 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01356 { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info }, 01357 { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info }, 01358 { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info }, 01359 #endif 01360 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01361 { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info }, 01362 { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info }, 01363 { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info }, 01364 #endif 01365 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01366 { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info }, 01367 { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info }, 01368 { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info }, 01369 #endif 01370 #if defined(MBEDTLS_GCM_C) 01371 { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info }, 01372 { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info }, 01373 { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info }, 01374 #endif 01375 #if defined(MBEDTLS_CCM_C) 01376 { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info }, 01377 { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info }, 01378 { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info }, 01379 #endif 01380 #endif /* MBEDTLS_AES_C */ 01381 01382 #if defined(MBEDTLS_ARC4_C) 01383 { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info }, 01384 #endif 01385 01386 #if defined(MBEDTLS_BLOWFISH_C) 01387 { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info }, 01388 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01389 { MBEDTLS_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info }, 01390 #endif 01391 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01392 { MBEDTLS_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info }, 01393 #endif 01394 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01395 { MBEDTLS_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info }, 01396 #endif 01397 #endif /* MBEDTLS_BLOWFISH_C */ 01398 01399 #if defined(MBEDTLS_CAMELLIA_C) 01400 { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info }, 01401 { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info }, 01402 { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info }, 01403 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01404 { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info }, 01405 { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info }, 01406 { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info }, 01407 #endif 01408 #if defined(MBEDTLS_CIPHER_MODE_CFB) 01409 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info }, 01410 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info }, 01411 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info }, 01412 #endif 01413 #if defined(MBEDTLS_CIPHER_MODE_CTR) 01414 { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info }, 01415 { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info }, 01416 { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info }, 01417 #endif 01418 #if defined(MBEDTLS_GCM_C) 01419 { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info }, 01420 { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info }, 01421 { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info }, 01422 #endif 01423 #if defined(MBEDTLS_CCM_C) 01424 { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info }, 01425 { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info }, 01426 { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info }, 01427 #endif 01428 #endif /* MBEDTLS_CAMELLIA_C */ 01429 01430 #if defined(MBEDTLS_DES_C) 01431 { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info }, 01432 { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info }, 01433 { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info }, 01434 #if defined(MBEDTLS_CIPHER_MODE_CBC) 01435 { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info }, 01436 { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info }, 01437 { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info }, 01438 #endif 01439 #endif /* MBEDTLS_DES_C */ 01440 01441 #if defined(MBEDTLS_CIPHER_NULL_CIPHER) 01442 { MBEDTLS_CIPHER_NULL, &null_cipher_info }, 01443 #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ 01444 01445 { MBEDTLS_CIPHER_NONE, NULL } 01446 }; 01447 01448 #define NUM_CIPHERS sizeof mbedtls_cipher_definitions / sizeof mbedtls_cipher_definitions[0] 01449 int mbedtls_cipher_supported[NUM_CIPHERS]; 01450 01451 #endif /* MBEDTLS_CIPHER_C */
Generated on Tue Jul 12 2022 12:52:42 by
