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