1 /* $OpenBSD: evp_names.c,v 1.18 2024/08/31 10:38:49 tb Exp $ */ 2 /* 3 * Copyright (c) 2023 Theo Buehler <tb@openbsd.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #include <openssl/err.h> 19 #include <openssl/evp.h> 20 #include <openssl/objects.h> 21 22 #include <stdlib.h> 23 #include <string.h> 24 25 /* 26 * In the following two structs, .name is the lookup name that is used 27 * for EVP_get_cipherbyname() and EVP_get_digestbyname(), while .alias 28 * keeps track of the aliased name. 29 */ 30 31 struct cipher_name { 32 const char *name; 33 const EVP_CIPHER *(*cipher)(void); 34 const char *alias; 35 }; 36 37 struct digest_name { 38 const char *name; 39 const EVP_MD *(*digest)(void); 40 const char *alias; 41 }; 42 43 /* 44 * Keep this table alphabetically sorted by increasing .name. 45 * regress/lib/libcrypto/evp/evp_test.c checks that. 46 */ 47 48 static const struct cipher_name cipher_names[] = { 49 { 50 .name = SN_aes_128_cbc, 51 .cipher = EVP_aes_128_cbc, 52 }, 53 { 54 .name = SN_aes_128_cfb128, 55 .cipher = EVP_aes_128_cfb128, 56 }, 57 { 58 .name = SN_aes_128_cfb1, 59 .cipher = EVP_aes_128_cfb1, 60 }, 61 { 62 .name = SN_aes_128_cfb8, 63 .cipher = EVP_aes_128_cfb8, 64 }, 65 { 66 .name = SN_aes_128_ctr, 67 .cipher = EVP_aes_128_ctr, 68 }, 69 { 70 .name = SN_aes_128_ecb, 71 .cipher = EVP_aes_128_ecb, 72 }, 73 { 74 .name = SN_aes_128_ofb128, 75 .cipher = EVP_aes_128_ofb, 76 }, 77 { 78 .name = SN_aes_128_xts, 79 .cipher = EVP_aes_128_xts, 80 }, 81 82 { 83 .name = SN_aes_192_cbc, 84 .cipher = EVP_aes_192_cbc, 85 }, 86 { 87 .name = SN_aes_192_cfb128, 88 .cipher = EVP_aes_192_cfb128, 89 }, 90 { 91 .name = SN_aes_192_cfb1, 92 .cipher = EVP_aes_192_cfb1, 93 }, 94 { 95 .name = SN_aes_192_cfb8, 96 .cipher = EVP_aes_192_cfb8, 97 }, 98 { 99 .name = SN_aes_192_ctr, 100 .cipher = EVP_aes_192_ctr, 101 }, 102 { 103 .name = SN_aes_192_ecb, 104 .cipher = EVP_aes_192_ecb, 105 }, 106 { 107 .name = SN_aes_192_ofb128, 108 .cipher = EVP_aes_192_ofb, 109 }, 110 111 { 112 .name = SN_aes_256_cbc, 113 .cipher = EVP_aes_256_cbc, 114 }, 115 { 116 .name = SN_aes_256_cfb128, 117 .cipher = EVP_aes_256_cfb128, 118 }, 119 { 120 .name = SN_aes_256_cfb1, 121 .cipher = EVP_aes_256_cfb1, 122 }, 123 { 124 .name = SN_aes_256_cfb8, 125 .cipher = EVP_aes_256_cfb8, 126 }, 127 { 128 .name = SN_aes_256_ctr, 129 .cipher = EVP_aes_256_ctr, 130 }, 131 { 132 .name = SN_aes_256_ecb, 133 .cipher = EVP_aes_256_ecb, 134 }, 135 { 136 .name = SN_aes_256_ofb128, 137 .cipher = EVP_aes_256_ofb, 138 }, 139 { 140 .name = SN_aes_256_xts, 141 .cipher = EVP_aes_256_xts, 142 }, 143 144 { 145 .name = "AES128", 146 .cipher = EVP_aes_128_cbc, 147 .alias = SN_aes_128_cbc, 148 }, 149 { 150 .name = "AES192", 151 .cipher = EVP_aes_192_cbc, 152 .alias = SN_aes_192_cbc, 153 }, 154 { 155 .name = "AES256", 156 .cipher = EVP_aes_256_cbc, 157 .alias = SN_aes_256_cbc, 158 }, 159 160 { 161 .name = "BF", 162 .cipher = EVP_bf_cbc, 163 .alias = SN_bf_cbc, 164 }, 165 166 { 167 .name = SN_bf_cbc, 168 .cipher = EVP_bf_cbc, 169 }, 170 { 171 .name = SN_bf_cfb64, 172 .cipher = EVP_bf_cfb64, 173 }, 174 { 175 .name = SN_bf_ecb, 176 .cipher = EVP_bf_ecb, 177 }, 178 { 179 .name = SN_bf_ofb64, 180 .cipher = EVP_bf_ofb, 181 }, 182 183 { 184 .name = SN_camellia_128_cbc, 185 .cipher = EVP_camellia_128_cbc, 186 }, 187 { 188 .name = SN_camellia_128_cfb128, 189 .cipher = EVP_camellia_128_cfb128, 190 }, 191 { 192 .name = SN_camellia_128_cfb1, 193 .cipher = EVP_camellia_128_cfb1, 194 }, 195 { 196 .name = SN_camellia_128_cfb8, 197 .cipher = EVP_camellia_128_cfb8, 198 }, 199 { 200 .name = SN_camellia_128_ecb, 201 .cipher = EVP_camellia_128_ecb, 202 }, 203 { 204 .name = SN_camellia_128_ofb128, 205 .cipher = EVP_camellia_128_ofb, 206 }, 207 208 { 209 .name = SN_camellia_192_cbc, 210 .cipher = EVP_camellia_192_cbc, 211 }, 212 { 213 .name = SN_camellia_192_cfb128, 214 .cipher = EVP_camellia_192_cfb128, 215 }, 216 { 217 .name = SN_camellia_192_cfb1, 218 .cipher = EVP_camellia_192_cfb1, 219 }, 220 { 221 .name = SN_camellia_192_cfb8, 222 .cipher = EVP_camellia_192_cfb8, 223 }, 224 { 225 .name = SN_camellia_192_ecb, 226 .cipher = EVP_camellia_192_ecb, 227 }, 228 { 229 .name = SN_camellia_192_ofb128, 230 .cipher = EVP_camellia_192_ofb, 231 }, 232 233 { 234 .name = SN_camellia_256_cbc, 235 .cipher = EVP_camellia_256_cbc, 236 }, 237 { 238 .name = SN_camellia_256_cfb128, 239 .cipher = EVP_camellia_256_cfb128, 240 }, 241 { 242 .name = SN_camellia_256_cfb1, 243 .cipher = EVP_camellia_256_cfb1, 244 }, 245 { 246 .name = SN_camellia_256_cfb8, 247 .cipher = EVP_camellia_256_cfb8, 248 }, 249 { 250 .name = SN_camellia_256_ecb, 251 .cipher = EVP_camellia_256_ecb, 252 }, 253 { 254 .name = SN_camellia_256_ofb128, 255 .cipher = EVP_camellia_256_ofb, 256 }, 257 258 { 259 .name = "CAMELLIA128", 260 .cipher = EVP_camellia_128_cbc, 261 .alias = SN_camellia_128_cbc, 262 }, 263 { 264 .name = "CAMELLIA192", 265 .cipher = EVP_camellia_192_cbc, 266 .alias = SN_camellia_192_cbc, 267 }, 268 { 269 .name = "CAMELLIA256", 270 .cipher = EVP_camellia_256_cbc, 271 .alias = SN_camellia_256_cbc, 272 }, 273 274 { 275 .name = "CAST", 276 .cipher = EVP_cast5_cbc, 277 .alias = SN_cast5_cbc, 278 }, 279 { 280 .name = "CAST-cbc", 281 .cipher = EVP_cast5_cbc, 282 .alias = SN_cast5_cbc, 283 }, 284 285 { 286 .name = SN_cast5_cbc, 287 .cipher = EVP_cast5_cbc, 288 }, 289 { 290 .name = SN_cast5_cfb64, 291 .cipher = EVP_cast5_cfb, 292 }, 293 { 294 .name = SN_cast5_ecb, 295 .cipher = EVP_cast5_ecb, 296 }, 297 { 298 .name = SN_cast5_ofb64, 299 .cipher = EVP_cast5_ofb, 300 }, 301 302 { 303 .name = SN_chacha20, 304 .cipher = EVP_chacha20, 305 }, 306 { 307 .name = "ChaCha20", 308 .cipher = EVP_chacha20, 309 .alias = SN_chacha20, 310 }, 311 312 { 313 .name = SN_chacha20_poly1305, 314 .cipher = EVP_chacha20_poly1305, 315 }, 316 317 { 318 .name = "DES", 319 .cipher = EVP_des_cbc, 320 .alias = SN_des_cbc, 321 }, 322 323 { 324 .name = SN_des_cbc, 325 .cipher = EVP_des_cbc, 326 }, 327 { 328 .name = SN_des_cfb64, 329 .cipher = EVP_des_cfb64, 330 }, 331 { 332 .name = SN_des_cfb1, 333 .cipher = EVP_des_cfb1, 334 }, 335 { 336 .name = SN_des_cfb8, 337 .cipher = EVP_des_cfb8, 338 }, 339 { 340 .name = SN_des_ecb, 341 .cipher = EVP_des_ecb, 342 }, 343 { 344 .name = SN_des_ede_ecb, 345 .cipher = EVP_des_ede, 346 }, 347 { 348 .name = SN_des_ede_cbc, 349 .cipher = EVP_des_ede_cbc, 350 }, 351 { 352 .name = SN_des_ede_cfb64, 353 .cipher = EVP_des_ede_cfb64, 354 }, 355 { 356 .name = SN_des_ede_ofb64, 357 .cipher = EVP_des_ede_ofb, 358 }, 359 { 360 .name = SN_des_ede3_ecb, 361 .cipher = EVP_des_ede3_ecb, 362 }, 363 { 364 .name = SN_des_ede3_cbc, 365 .cipher = EVP_des_ede3_cbc, 366 }, 367 { 368 .name = SN_des_ede3_cfb64, 369 .cipher = EVP_des_ede3_cfb, 370 }, 371 { 372 .name = SN_des_ede3_cfb1, 373 .cipher = EVP_des_ede3_cfb1, 374 }, 375 { 376 .name = SN_des_ede3_cfb8, 377 .cipher = EVP_des_ede3_cfb8, 378 }, 379 { 380 .name = SN_des_ede3_ofb64, 381 .cipher = EVP_des_ede3_ofb, 382 }, 383 { 384 .name = SN_des_ofb64, 385 .cipher = EVP_des_ofb, 386 }, 387 388 { 389 .name = "DES3", 390 .cipher = EVP_des_ede3_cbc, 391 .alias = SN_des_ede3_cbc, 392 }, 393 394 { 395 .name = "DESX", 396 .cipher = EVP_desx_cbc, 397 .alias = SN_desx_cbc, 398 }, 399 { 400 .name = SN_desx_cbc, 401 .cipher = EVP_desx_cbc, 402 }, 403 404 { 405 .name = "IDEA", 406 .cipher = EVP_idea_cbc, 407 .alias = SN_idea_cbc, 408 }, 409 410 { 411 .name = SN_idea_cbc, 412 .cipher = EVP_idea_cbc, 413 }, 414 { 415 .name = SN_idea_cfb64, 416 .cipher = EVP_idea_cfb64, 417 }, 418 { 419 .name = SN_idea_ecb, 420 .cipher = EVP_idea_ecb, 421 }, 422 { 423 .name = SN_idea_ofb64, 424 .cipher = EVP_idea_ofb, 425 }, 426 427 { 428 .name = "RC2", 429 .cipher = EVP_rc2_cbc, 430 .alias = SN_rc2_cbc, 431 }, 432 433 { 434 .name = SN_rc2_40_cbc, 435 .cipher = EVP_rc2_40_cbc, 436 }, 437 { 438 .name = SN_rc2_64_cbc, 439 .cipher = EVP_rc2_64_cbc, 440 }, 441 { 442 .name = SN_rc2_cbc, 443 .cipher = EVP_rc2_cbc, 444 }, 445 { 446 .name = SN_rc2_cfb64, 447 .cipher = EVP_rc2_cfb64, 448 }, 449 { 450 .name = SN_rc2_ecb, 451 .cipher = EVP_rc2_ecb, 452 }, 453 { 454 .name = SN_rc2_ofb64, 455 .cipher = EVP_rc2_ofb, 456 }, 457 458 { 459 .name = SN_rc4, 460 .cipher = EVP_rc4, 461 }, 462 { 463 .name = SN_rc4_40, 464 .cipher = EVP_rc4_40, 465 }, 466 467 { 468 .name = "SM4", 469 .cipher = EVP_sm4_cbc, 470 .alias = SN_sm4_cbc, 471 }, 472 473 { 474 .name = SN_sm4_cbc, 475 .cipher = EVP_sm4_cbc, 476 }, 477 { 478 .name = SN_sm4_cfb128, 479 .cipher = EVP_sm4_cfb128, 480 }, 481 { 482 .name = SN_sm4_ctr, 483 .cipher = EVP_sm4_ctr, 484 }, 485 { 486 .name = SN_sm4_ecb, 487 .cipher = EVP_sm4_ecb, 488 }, 489 { 490 .name = SN_sm4_ofb128, 491 .cipher = EVP_sm4_ofb, 492 }, 493 494 { 495 .name = LN_aes_128_cbc, 496 .cipher = EVP_aes_128_cbc, 497 }, 498 { 499 .name = LN_aes_128_ccm, 500 .cipher = EVP_aes_128_ccm, 501 }, 502 { 503 .name = LN_aes_128_cfb128, 504 .cipher = EVP_aes_128_cfb128, 505 }, 506 { 507 .name = LN_aes_128_cfb1, 508 .cipher = EVP_aes_128_cfb1, 509 }, 510 { 511 .name = LN_aes_128_cfb8, 512 .cipher = EVP_aes_128_cfb8, 513 }, 514 { 515 .name = LN_aes_128_ctr, 516 .cipher = EVP_aes_128_ctr, 517 }, 518 { 519 .name = LN_aes_128_ecb, 520 .cipher = EVP_aes_128_ecb, 521 }, 522 { 523 .name = LN_aes_128_gcm, 524 .cipher = EVP_aes_128_gcm, 525 }, 526 { 527 .name = LN_aes_128_ofb128, 528 .cipher = EVP_aes_128_ofb, 529 }, 530 { 531 .name = LN_aes_128_xts, 532 .cipher = EVP_aes_128_xts, 533 }, 534 535 { 536 .name = LN_aes_192_cbc, 537 .cipher = EVP_aes_192_cbc, 538 }, 539 { 540 .name = LN_aes_192_ccm, 541 .cipher = EVP_aes_192_ccm, 542 }, 543 { 544 .name = LN_aes_192_cfb128, 545 .cipher = EVP_aes_192_cfb128, 546 }, 547 { 548 .name = LN_aes_192_cfb1, 549 .cipher = EVP_aes_192_cfb1, 550 }, 551 { 552 .name = LN_aes_192_cfb8, 553 .cipher = EVP_aes_192_cfb8, 554 }, 555 { 556 .name = LN_aes_192_ctr, 557 .cipher = EVP_aes_192_ctr, 558 }, 559 { 560 .name = LN_aes_192_ecb, 561 .cipher = EVP_aes_192_ecb, 562 }, 563 { 564 .name = LN_aes_192_gcm, 565 .cipher = EVP_aes_192_gcm, 566 }, 567 { 568 .name = LN_aes_192_ofb128, 569 .cipher = EVP_aes_192_ofb, 570 }, 571 572 { 573 .name = LN_aes_256_cbc, 574 .cipher = EVP_aes_256_cbc, 575 }, 576 { 577 .name = LN_aes_256_ccm, 578 .cipher = EVP_aes_256_ccm, 579 }, 580 { 581 .name = LN_aes_256_cfb128, 582 .cipher = EVP_aes_256_cfb128, 583 }, 584 { 585 .name = LN_aes_256_cfb1, 586 .cipher = EVP_aes_256_cfb1, 587 }, 588 { 589 .name = LN_aes_256_cfb8, 590 .cipher = EVP_aes_256_cfb8, 591 }, 592 { 593 .name = LN_aes_256_ctr, 594 .cipher = EVP_aes_256_ctr, 595 }, 596 { 597 .name = LN_aes_256_ecb, 598 .cipher = EVP_aes_256_ecb, 599 }, 600 { 601 .name = LN_aes_256_gcm, 602 .cipher = EVP_aes_256_gcm, 603 }, 604 { 605 .name = LN_aes_256_ofb128, 606 .cipher = EVP_aes_256_ofb, 607 }, 608 { 609 .name = LN_aes_256_xts, 610 .cipher = EVP_aes_256_xts, 611 }, 612 613 { 614 .name = "aes128", 615 .cipher = EVP_aes_128_cbc, 616 .alias = SN_aes_128_cbc, 617 }, 618 { 619 .name = "aes192", 620 .cipher = EVP_aes_192_cbc, 621 .alias = SN_aes_192_cbc, 622 }, 623 { 624 .name = "aes256", 625 .cipher = EVP_aes_256_cbc, 626 .alias = SN_aes_256_cbc, 627 }, 628 629 { 630 .name = "bf", 631 .cipher = EVP_bf_cbc, 632 .alias = SN_bf_cbc, 633 }, 634 635 { 636 .name = LN_bf_cbc, 637 .cipher = EVP_bf_cbc, 638 }, 639 { 640 .name = LN_bf_cfb64, 641 .cipher = EVP_bf_cfb64, 642 }, 643 { 644 .name = LN_bf_ecb, 645 .cipher = EVP_bf_ecb, 646 }, 647 { 648 .name = LN_bf_ofb64, 649 .cipher = EVP_bf_ofb, 650 }, 651 652 { 653 .name = "blowfish", 654 .cipher = EVP_bf_cbc, 655 .alias = SN_bf_cbc, 656 }, 657 658 { 659 .name = LN_camellia_128_cbc, 660 .cipher = EVP_camellia_128_cbc, 661 }, 662 { 663 .name = LN_camellia_128_cfb128, 664 .cipher = EVP_camellia_128_cfb128, 665 }, 666 { 667 .name = LN_camellia_128_cfb1, 668 .cipher = EVP_camellia_128_cfb1, 669 }, 670 { 671 .name = LN_camellia_128_cfb8, 672 .cipher = EVP_camellia_128_cfb8, 673 }, 674 { 675 .name = LN_camellia_128_ecb, 676 .cipher = EVP_camellia_128_ecb, 677 }, 678 { 679 .name = LN_camellia_128_ofb128, 680 .cipher = EVP_camellia_128_ofb, 681 }, 682 683 { 684 .name = LN_camellia_192_cbc, 685 .cipher = EVP_camellia_192_cbc, 686 }, 687 { 688 .name = LN_camellia_192_cfb128, 689 .cipher = EVP_camellia_192_cfb128, 690 }, 691 { 692 .name = LN_camellia_192_cfb1, 693 .cipher = EVP_camellia_192_cfb1, 694 }, 695 { 696 .name = LN_camellia_192_cfb8, 697 .cipher = EVP_camellia_192_cfb8, 698 }, 699 { 700 .name = LN_camellia_192_ecb, 701 .cipher = EVP_camellia_192_ecb, 702 }, 703 { 704 .name = LN_camellia_192_ofb128, 705 .cipher = EVP_camellia_192_ofb, 706 }, 707 708 { 709 .name = LN_camellia_256_cbc, 710 .cipher = EVP_camellia_256_cbc, 711 }, 712 { 713 .name = LN_camellia_256_cfb128, 714 .cipher = EVP_camellia_256_cfb128, 715 }, 716 { 717 .name = LN_camellia_256_cfb1, 718 .cipher = EVP_camellia_256_cfb1, 719 }, 720 { 721 .name = LN_camellia_256_cfb8, 722 .cipher = EVP_camellia_256_cfb8, 723 }, 724 { 725 .name = LN_camellia_256_ecb, 726 .cipher = EVP_camellia_256_ecb, 727 }, 728 { 729 .name = LN_camellia_256_ofb128, 730 .cipher = EVP_camellia_256_ofb, 731 }, 732 733 { 734 .name = "camellia128", 735 .cipher = EVP_camellia_128_cbc, 736 .alias = SN_camellia_128_cbc, 737 }, 738 { 739 .name = "camellia192", 740 .cipher = EVP_camellia_192_cbc, 741 .alias = SN_camellia_192_cbc, 742 }, 743 { 744 .name = "camellia256", 745 .cipher = EVP_camellia_256_cbc, 746 .alias = SN_camellia_256_cbc, 747 }, 748 749 { 750 .name = "cast", 751 .cipher = EVP_cast5_cbc, 752 .alias = SN_cast5_cbc, 753 }, 754 { 755 .name = "cast-cbc", 756 .cipher = EVP_cast5_cbc, 757 .alias = SN_cast5_cbc, 758 }, 759 760 { 761 .name = LN_cast5_cbc, 762 .cipher = EVP_cast5_cbc, 763 }, 764 { 765 .name = LN_cast5_cfb64, 766 .cipher = EVP_cast5_cfb, 767 }, 768 { 769 .name = LN_cast5_ecb, 770 .cipher = EVP_cast5_ecb, 771 }, 772 { 773 .name = LN_cast5_ofb64, 774 .cipher = EVP_cast5_ofb, 775 }, 776 777 { 778 .name = LN_chacha20, 779 .cipher = EVP_chacha20, 780 }, 781 { 782 .name = "chacha20", 783 .cipher = EVP_chacha20, 784 .alias = LN_chacha20, 785 }, 786 787 { 788 .name = LN_chacha20_poly1305, 789 .cipher = EVP_chacha20_poly1305, 790 }, 791 792 { 793 .name = "des", 794 .cipher = EVP_des_cbc, 795 .alias = SN_des_cbc, 796 }, 797 798 { 799 .name = LN_des_cbc, 800 .cipher = EVP_des_cbc, 801 }, 802 { 803 .name = LN_des_cfb64, 804 .cipher = EVP_des_cfb64, 805 }, 806 { 807 .name = LN_des_cfb1, 808 .cipher = EVP_des_cfb1, 809 }, 810 { 811 .name = LN_des_cfb8, 812 .cipher = EVP_des_cfb8, 813 }, 814 { 815 .name = LN_des_ecb, 816 .cipher = EVP_des_ecb, 817 }, 818 { 819 .name = LN_des_ede_ecb, 820 .cipher = EVP_des_ede, 821 }, 822 { 823 .name = LN_des_ede_cbc, 824 .cipher = EVP_des_ede_cbc, 825 }, 826 { 827 .name = LN_des_ede_cfb64, 828 .cipher = EVP_des_ede_cfb64, 829 }, 830 { 831 .name = LN_des_ede_ofb64, 832 .cipher = EVP_des_ede_ofb, 833 }, 834 { 835 .name = LN_des_ede3_ecb, 836 .cipher = EVP_des_ede3_ecb, 837 }, 838 { 839 .name = LN_des_ede3_cbc, 840 .cipher = EVP_des_ede3_cbc, 841 }, 842 { 843 .name = LN_des_ede3_cfb64, 844 .cipher = EVP_des_ede3_cfb, 845 }, 846 { 847 .name = LN_des_ede3_cfb1, 848 .cipher = EVP_des_ede3_cfb1, 849 }, 850 { 851 .name = LN_des_ede3_cfb8, 852 .cipher = EVP_des_ede3_cfb8, 853 }, 854 { 855 .name = LN_des_ede3_ofb64, 856 .cipher = EVP_des_ede3_ofb, 857 }, 858 { 859 .name = LN_des_ofb64, 860 .cipher = EVP_des_ofb, 861 }, 862 863 { 864 .name = "des3", 865 .cipher = EVP_des_ede3_cbc, 866 .alias = SN_des_ede3_cbc, 867 }, 868 869 { 870 .name = "desx", 871 .cipher = EVP_desx_cbc, 872 .alias = SN_desx_cbc, 873 }, 874 { 875 .name = LN_desx_cbc, 876 .cipher = EVP_desx_cbc, 877 }, 878 879 { 880 .name = SN_aes_128_ccm, 881 .cipher = EVP_aes_128_ccm, 882 }, 883 { 884 .name = SN_aes_128_gcm, 885 .cipher = EVP_aes_128_gcm, 886 }, 887 { 888 .name = SN_id_aes128_wrap, 889 .cipher = EVP_aes_128_wrap, 890 }, 891 892 { 893 .name = SN_aes_192_ccm, 894 .cipher = EVP_aes_192_ccm, 895 }, 896 { 897 .name = SN_aes_192_gcm, 898 .cipher = EVP_aes_192_gcm, 899 }, 900 { 901 .name = SN_id_aes192_wrap, 902 .cipher = EVP_aes_192_wrap, 903 }, 904 905 { 906 .name = SN_aes_256_ccm, 907 .cipher = EVP_aes_256_ccm, 908 }, 909 { 910 .name = SN_aes_256_gcm, 911 .cipher = EVP_aes_256_gcm, 912 }, 913 { 914 .name = SN_id_aes256_wrap, 915 .cipher = EVP_aes_256_wrap, 916 }, 917 918 { 919 .name = "idea", 920 .cipher = EVP_idea_cbc, 921 .alias = SN_idea_cbc, 922 }, 923 924 { 925 .name = LN_idea_cbc, 926 .cipher = EVP_idea_cbc, 927 }, 928 { 929 .name = LN_idea_cfb64, 930 .cipher = EVP_idea_cfb64, 931 }, 932 { 933 .name = LN_idea_ecb, 934 .cipher = EVP_idea_ecb, 935 }, 936 { 937 .name = LN_idea_ofb64, 938 .cipher = EVP_idea_ofb, 939 }, 940 941 { 942 .name = "rc2", 943 .cipher = EVP_rc2_cbc, 944 .alias = SN_rc2_cbc, 945 }, 946 947 { 948 .name = LN_rc2_40_cbc, 949 .cipher = EVP_rc2_40_cbc, 950 }, 951 { 952 .name = LN_rc2_64_cbc, 953 .cipher = EVP_rc2_64_cbc, 954 }, 955 { 956 .name = LN_rc2_cbc, 957 .cipher = EVP_rc2_cbc, 958 }, 959 { 960 .name = LN_rc2_cfb64, 961 .cipher = EVP_rc2_cfb64, 962 }, 963 { 964 .name = LN_rc2_ecb, 965 .cipher = EVP_rc2_ecb, 966 }, 967 { 968 .name = LN_rc2_ofb64, 969 .cipher = EVP_rc2_ofb, 970 }, 971 972 { 973 .name = LN_rc4, 974 .cipher = EVP_rc4, 975 }, 976 { 977 .name = LN_rc4_40, 978 .cipher = EVP_rc4_40, 979 }, 980 981 { 982 .name = "sm4", 983 .cipher = EVP_sm4_cbc, 984 .alias = SN_sm4_cbc, 985 }, 986 987 { 988 .name = LN_sm4_cbc, 989 .cipher = EVP_sm4_cbc, 990 }, 991 { 992 .name = LN_sm4_cfb128, 993 .cipher = EVP_sm4_cfb128, 994 }, 995 { 996 .name = LN_sm4_ctr, 997 .cipher = EVP_sm4_ctr, 998 }, 999 { 1000 .name = LN_sm4_ecb, 1001 .cipher = EVP_sm4_ecb, 1002 }, 1003 { 1004 .name = LN_sm4_ofb128, 1005 .cipher = EVP_sm4_ofb, 1006 }, 1007 }; 1008 1009 #define N_CIPHER_NAMES (sizeof(cipher_names) / sizeof(cipher_names[0])) 1010 1011 /* 1012 * Keep this table alphabetically sorted by increasing .name. 1013 * regress/lib/libcrypto/evp/evp_test.c checks that. 1014 */ 1015 1016 static const struct digest_name digest_names[] = { 1017 { 1018 .name = SN_dsaWithSHA1, 1019 .digest = EVP_sha1, 1020 .alias = SN_sha1, 1021 }, 1022 1023 { 1024 .name = SN_md4, 1025 .digest = EVP_md4, 1026 }, 1027 1028 { 1029 .name = SN_md5, 1030 .digest = EVP_md5, 1031 }, 1032 1033 { 1034 .name = SN_md5_sha1, 1035 .digest = EVP_md5_sha1, 1036 }, 1037 1038 { 1039 .name = SN_ripemd160, 1040 .digest = EVP_ripemd160, 1041 }, 1042 1043 { 1044 .name = SN_md4WithRSAEncryption, 1045 .digest = EVP_md4, 1046 .alias = SN_md4, 1047 }, 1048 { 1049 .name = SN_md5WithRSAEncryption, 1050 .digest = EVP_md5, 1051 .alias = SN_md5, 1052 }, 1053 { 1054 .name = SN_ripemd160WithRSA, 1055 .digest = EVP_ripemd160, 1056 .alias = SN_ripemd160, 1057 }, 1058 { 1059 .name = SN_sha1WithRSAEncryption, 1060 .digest = EVP_sha1, 1061 .alias = SN_sha1, 1062 }, 1063 { 1064 .name = SN_sha1WithRSA, 1065 .digest = EVP_sha1, 1066 .alias = SN_sha1, /* XXX - alias to SN_sha1WithRSAEncryption? */ 1067 }, 1068 { 1069 .name = SN_sha224WithRSAEncryption, 1070 .digest = EVP_sha224, 1071 .alias = SN_sha224, 1072 }, 1073 { 1074 .name = SN_sha256WithRSAEncryption, 1075 .digest = EVP_sha256, 1076 .alias = SN_sha256, 1077 }, 1078 { 1079 .name = LN_RSA_SHA3_224, 1080 .digest = EVP_sha3_224, 1081 .alias = SN_sha3_224, 1082 }, 1083 { 1084 .name = LN_RSA_SHA3_256, 1085 .digest = EVP_sha3_256, 1086 .alias = SN_sha3_256, 1087 }, 1088 { 1089 .name = LN_RSA_SHA3_384, 1090 .digest = EVP_sha3_384, 1091 .alias = SN_sha3_384, 1092 }, 1093 { 1094 .name = LN_RSA_SHA3_512, 1095 .digest = EVP_sha3_512, 1096 .alias = SN_sha3_512, 1097 }, 1098 { 1099 .name = SN_sha384WithRSAEncryption, 1100 .digest = EVP_sha384, 1101 .alias = SN_sha384, 1102 }, 1103 { 1104 .name = SN_sha512WithRSAEncryption, 1105 .digest = EVP_sha512, 1106 .alias = SN_sha512, 1107 }, 1108 { 1109 .name = SN_sha512_224WithRSAEncryption, 1110 .digest = EVP_sha512_224, 1111 .alias = SN_sha512_224, 1112 }, 1113 { 1114 .name = SN_sha512_256WithRSAEncryption, 1115 .digest = EVP_sha512_256, 1116 .alias = SN_sha512_256, 1117 }, 1118 { 1119 .name = SN_sm3WithRSAEncryption, 1120 .digest = EVP_sm3, 1121 .alias = SN_sm3, 1122 }, 1123 1124 { 1125 .name = SN_sha1, 1126 .digest = EVP_sha1, 1127 }, 1128 { 1129 .name = SN_sha224, 1130 .digest = EVP_sha224, 1131 }, 1132 { 1133 .name = SN_sha256, 1134 .digest = EVP_sha256, 1135 }, 1136 { 1137 .name = SN_sha3_224, 1138 .digest = EVP_sha3_224, 1139 }, 1140 { 1141 .name = SN_sha3_256, 1142 .digest = EVP_sha3_256, 1143 }, 1144 { 1145 .name = SN_sha3_384, 1146 .digest = EVP_sha3_384, 1147 }, 1148 { 1149 .name = SN_sha3_512, 1150 .digest = EVP_sha3_512, 1151 }, 1152 1153 { 1154 .name = SN_sha384, 1155 .digest = EVP_sha384, 1156 }, 1157 { 1158 .name = SN_sha512, 1159 .digest = EVP_sha512, 1160 }, 1161 { 1162 .name = SN_sha512_224, 1163 .digest = EVP_sha512_224, 1164 }, 1165 { 1166 .name = SN_sha512_256, 1167 .digest = EVP_sha512_256, 1168 }, 1169 1170 { 1171 .name = SN_sm3, 1172 .digest = EVP_sm3, 1173 }, 1174 1175 { 1176 .name = LN_dsaWithSHA1, 1177 .digest = EVP_sha1, 1178 .alias = SN_sha1, 1179 }, 1180 1181 { 1182 .name = LN_dsa_with_SHA224, 1183 .digest = EVP_sha224, 1184 .alias = SN_sha224, 1185 }, 1186 { 1187 .name = LN_dsa_with_SHA256, 1188 .digest = EVP_sha256, 1189 .alias = SN_sha256, 1190 }, 1191 { 1192 .name = LN_dsa_with_SHA384, 1193 .digest = EVP_sha384, 1194 .alias = SN_sha384, 1195 }, 1196 { 1197 .name = LN_dsa_with_SHA512, 1198 .digest = EVP_sha512, 1199 .alias = SN_sha512, 1200 }, 1201 1202 { 1203 .name = SN_ecdsa_with_SHA1, 1204 .digest = EVP_sha1, 1205 .alias = SN_sha1, 1206 }, 1207 1208 { 1209 .name = SN_ecdsa_with_SHA224, 1210 .digest = EVP_sha224, 1211 .alias = SN_sha224, 1212 }, 1213 { 1214 .name = SN_ecdsa_with_SHA256, 1215 .digest = EVP_sha256, 1216 .alias = SN_sha256, 1217 }, 1218 { 1219 .name = SN_ecdsa_with_SHA384, 1220 .digest = EVP_sha384, 1221 .alias = SN_sha384, 1222 }, 1223 { 1224 .name = SN_ecdsa_with_SHA512, 1225 .digest = EVP_sha512, 1226 .alias = SN_sha512, 1227 }, 1228 1229 { 1230 .name = SN_dsa_with_SHA224, 1231 .digest = EVP_sha224, 1232 .alias = SN_sha224, 1233 }, 1234 { 1235 .name = SN_dsa_with_SHA256, 1236 .digest = EVP_sha256, 1237 .alias = SN_sha256, 1238 }, 1239 1240 { 1241 .name = SN_dsa_with_SHA3_224, 1242 .digest = EVP_sha3_224, 1243 .alias = SN_sha3_224, 1244 }, 1245 { 1246 .name = SN_dsa_with_SHA3_256, 1247 .digest = EVP_sha3_256, 1248 .alias = SN_sha3_256, 1249 }, 1250 { 1251 .name = SN_dsa_with_SHA3_384, 1252 .digest = EVP_sha3_384, 1253 .alias = SN_sha3_384, 1254 }, 1255 { 1256 .name = SN_dsa_with_SHA3_512, 1257 .digest = EVP_sha3_512, 1258 .alias = SN_sha3_512, 1259 }, 1260 1261 { 1262 .name = SN_dsa_with_SHA384, 1263 .digest = EVP_sha384, 1264 .alias = SN_sha384, 1265 }, 1266 { 1267 .name = SN_dsa_with_SHA512, 1268 .digest = EVP_sha512, 1269 .alias = SN_sha512, 1270 }, 1271 1272 { 1273 .name = SN_ecdsa_with_SHA3_224, 1274 .digest = EVP_sha3_224, 1275 .alias = SN_sha3_224, 1276 }, 1277 { 1278 .name = SN_ecdsa_with_SHA3_256, 1279 .digest = EVP_sha3_256, 1280 .alias = SN_sha3_256, 1281 }, 1282 { 1283 .name = SN_ecdsa_with_SHA3_384, 1284 .digest = EVP_sha3_384, 1285 .alias = SN_sha3_384, 1286 }, 1287 { 1288 .name = SN_ecdsa_with_SHA3_512, 1289 .digest = EVP_sha3_512, 1290 .alias = SN_sha3_512, 1291 }, 1292 1293 { 1294 .name = SN_RSA_SHA3_224, 1295 .digest = EVP_sha3_224, 1296 .alias = SN_sha3_224, 1297 }, 1298 { 1299 .name = SN_RSA_SHA3_256, 1300 .digest = EVP_sha3_256, 1301 .alias = SN_sha3_256, 1302 }, 1303 { 1304 .name = SN_RSA_SHA3_384, 1305 .digest = EVP_sha3_384, 1306 .alias = SN_sha3_384, 1307 }, 1308 { 1309 .name = SN_RSA_SHA3_512, 1310 .digest = EVP_sha3_512, 1311 .alias = SN_sha3_512, 1312 }, 1313 1314 { 1315 .name = LN_md4, 1316 .digest = EVP_md4, 1317 }, 1318 { 1319 .name = LN_md4WithRSAEncryption, 1320 .digest = EVP_md4, 1321 .alias = SN_md4, 1322 }, 1323 1324 { 1325 .name = LN_md5, 1326 .digest = EVP_md5, 1327 }, 1328 { 1329 .name = LN_md5_sha1, 1330 .digest = EVP_md5_sha1, 1331 }, 1332 { 1333 .name = LN_md5WithRSAEncryption, 1334 .digest = EVP_md5, 1335 .alias = SN_md5, 1336 }, 1337 1338 { 1339 .name = "ripemd", 1340 .digest = EVP_ripemd160, 1341 .alias = SN_ripemd160, 1342 }, 1343 { 1344 .name = LN_ripemd160, 1345 .digest = EVP_ripemd160, 1346 }, 1347 { 1348 .name = LN_ripemd160WithRSA, 1349 .digest = EVP_ripemd160, 1350 .alias = SN_ripemd160, 1351 }, 1352 { 1353 .name = "rmd160", 1354 .digest = EVP_ripemd160, 1355 .alias = SN_ripemd160, 1356 }, 1357 1358 { 1359 .name = LN_sha1, 1360 .digest = EVP_sha1, 1361 }, 1362 { 1363 .name = LN_sha1WithRSAEncryption, 1364 .digest = EVP_sha1, 1365 .alias = SN_sha1, 1366 }, 1367 1368 { 1369 .name = LN_sha224, 1370 .digest = EVP_sha224, 1371 }, 1372 { 1373 .name = LN_sha224WithRSAEncryption, 1374 .digest = EVP_sha224, 1375 .alias = SN_sha224, 1376 }, 1377 { 1378 .name = LN_sha256, 1379 .digest = EVP_sha256, 1380 }, 1381 { 1382 .name = LN_sha256WithRSAEncryption, 1383 .digest = EVP_sha256, 1384 .alias = SN_sha256, 1385 }, 1386 1387 { 1388 .name = LN_sha3_224, 1389 .digest = EVP_sha3_224, 1390 }, 1391 { 1392 .name = LN_sha3_256, 1393 .digest = EVP_sha3_256, 1394 }, 1395 { 1396 .name = LN_sha3_384, 1397 .digest = EVP_sha3_384, 1398 }, 1399 { 1400 .name = LN_sha3_512, 1401 .digest = EVP_sha3_512, 1402 }, 1403 1404 { 1405 .name = LN_sha384, 1406 .digest = EVP_sha384, 1407 }, 1408 { 1409 .name = LN_sha384WithRSAEncryption, 1410 .digest = EVP_sha384, 1411 .alias = SN_sha384, 1412 }, 1413 { 1414 .name = LN_sha512, 1415 .digest = EVP_sha512, 1416 }, 1417 { 1418 .name = LN_sha512_224, 1419 .digest = EVP_sha512_224, 1420 }, 1421 { 1422 .name = LN_sha512_224WithRSAEncryption, 1423 .digest = EVP_sha512_224, 1424 .alias = SN_sha512_224, 1425 }, 1426 { 1427 .name = LN_sha512_256, 1428 .digest = EVP_sha512_256, 1429 }, 1430 { 1431 .name = LN_sha512_256WithRSAEncryption, 1432 .digest = EVP_sha512_256, 1433 .alias = SN_sha512_256, 1434 }, 1435 { 1436 .name = LN_sha512WithRSAEncryption, 1437 .digest = EVP_sha512, 1438 .alias = SN_sha512, 1439 }, 1440 1441 { 1442 .name = LN_sm3, 1443 .digest = EVP_sm3, 1444 }, 1445 { 1446 .name = LN_sm3WithRSAEncryption, 1447 .digest = EVP_sm3, 1448 .alias = SN_sm3, 1449 }, 1450 1451 { 1452 .name = "ssl2-md5", 1453 .digest = EVP_md5, 1454 .alias = SN_md5, 1455 }, 1456 { 1457 .name = "ssl3-md5", 1458 .digest = EVP_md5, 1459 .alias = SN_md5, 1460 }, 1461 1462 { 1463 .name = "ssl3-sha1", 1464 .digest = EVP_sha1, 1465 .alias = SN_sha1, 1466 }, 1467 }; 1468 1469 #define N_DIGEST_NAMES (sizeof(digest_names) / sizeof(digest_names[0])) 1470 1471 void 1472 EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *, const char *, 1473 const char *, void *), void *arg) 1474 { 1475 size_t i; 1476 1477 /* Prayer and clean living lets you ignore errors, OpenSSL style. */ 1478 (void)OPENSSL_init_crypto(0, NULL); 1479 1480 for (i = 0; i < N_CIPHER_NAMES; i++) { 1481 const struct cipher_name *cipher = &cipher_names[i]; 1482 const EVP_CIPHER *evp_cipher; 1483 1484 if ((evp_cipher = cipher->cipher()) == NULL) 1485 continue; 1486 1487 if (cipher->alias != NULL) 1488 fn(NULL, cipher->name, cipher->alias, arg); 1489 else 1490 fn(evp_cipher, cipher->name, NULL, arg); 1491 } 1492 } 1493 LCRYPTO_ALIAS(EVP_CIPHER_do_all_sorted); 1494 1495 void 1496 EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *, const char *, const char *, 1497 void *), void *arg) 1498 { 1499 EVP_CIPHER_do_all_sorted(fn, arg); 1500 } 1501 LCRYPTO_ALIAS(EVP_CIPHER_do_all); 1502 1503 void 1504 EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *, const char *, const char *, 1505 void *), void *arg) 1506 { 1507 size_t i; 1508 1509 /* Prayer and clean living lets you ignore errors, OpenSSL style. */ 1510 (void)OPENSSL_init_crypto(0, NULL); 1511 1512 for (i = 0; i < N_DIGEST_NAMES; i++) { 1513 const struct digest_name *digest = &digest_names[i]; 1514 const EVP_MD *evp_md; 1515 1516 if ((evp_md = digest->digest()) == NULL) 1517 continue; 1518 1519 if (digest->alias != NULL) 1520 fn(NULL, digest->name, digest->alias, arg); 1521 else 1522 fn(evp_md, digest->name, NULL, arg); 1523 } 1524 } 1525 LCRYPTO_ALIAS(EVP_MD_do_all_sorted); 1526 1527 void 1528 EVP_MD_do_all(void (*fn)(const EVP_MD *, const char *, const char *, void *), 1529 void *arg) 1530 { 1531 EVP_MD_do_all_sorted(fn, arg); 1532 } 1533 LCRYPTO_ALIAS(EVP_MD_do_all); 1534 1535 /* 1536 * The OBJ_NAME API is completely misnamed. It has little to do with objects 1537 * and a lot to do with EVP. Therefore we implement a saner replacement for 1538 * the part of the old madness that we need to keep in the evp directory. 1539 */ 1540 1541 static int 1542 OBJ_NAME_from_cipher_name(OBJ_NAME *obj_name, const struct cipher_name *cipher) 1543 { 1544 const EVP_CIPHER *evp_cipher; 1545 1546 if ((evp_cipher = cipher->cipher()) == NULL) 1547 return 0; 1548 1549 obj_name->type = OBJ_NAME_TYPE_CIPHER_METH; 1550 obj_name->name = cipher->name; 1551 if (cipher->alias != NULL) { 1552 obj_name->alias = OBJ_NAME_ALIAS; 1553 obj_name->data = cipher->alias; 1554 } else { 1555 obj_name->alias = 0; 1556 obj_name->data = evp_cipher; 1557 } 1558 1559 return 1; 1560 } 1561 1562 static void 1563 OBJ_NAME_do_all_ciphers(void (*fn)(const OBJ_NAME *, void *), void *arg) 1564 { 1565 size_t i; 1566 1567 for (i = 0; i < N_CIPHER_NAMES; i++) { 1568 const struct cipher_name *cipher = &cipher_names[i]; 1569 OBJ_NAME name; 1570 1571 if (OBJ_NAME_from_cipher_name(&name, cipher)) 1572 fn(&name, arg); 1573 } 1574 } 1575 1576 static int 1577 OBJ_NAME_from_digest_name(OBJ_NAME *obj_name, const struct digest_name *digest) 1578 { 1579 const EVP_MD *evp_md; 1580 1581 if ((evp_md = digest->digest()) == NULL) 1582 return 0; 1583 1584 obj_name->type = OBJ_NAME_TYPE_MD_METH; 1585 obj_name->name = digest->name; 1586 if (digest->alias != NULL) { 1587 obj_name->alias = OBJ_NAME_ALIAS; 1588 obj_name->data = digest->alias; 1589 } else { 1590 obj_name->alias = 0; 1591 obj_name->data = evp_md; 1592 } 1593 1594 return 1; 1595 } 1596 1597 static void 1598 OBJ_NAME_do_all_digests(void (*fn)(const OBJ_NAME *, void *), void *arg) 1599 { 1600 size_t i; 1601 1602 for (i = 0; i < N_DIGEST_NAMES; i++) { 1603 const struct digest_name *digest = &digest_names[i]; 1604 OBJ_NAME name; 1605 1606 if (OBJ_NAME_from_digest_name(&name, digest)) 1607 fn(&name, arg); 1608 } 1609 } 1610 1611 void 1612 OBJ_NAME_do_all_sorted(int type, void (*fn)(const OBJ_NAME *, void *), void *arg) 1613 { 1614 /* Prayer and clean living lets you ignore errors, OpenSSL style. */ 1615 (void)OPENSSL_init_crypto(0, NULL); 1616 1617 if (type == OBJ_NAME_TYPE_CIPHER_METH) 1618 OBJ_NAME_do_all_ciphers(fn, arg); 1619 if (type == OBJ_NAME_TYPE_MD_METH) 1620 OBJ_NAME_do_all_digests(fn, arg); 1621 } 1622 LCRYPTO_ALIAS(OBJ_NAME_do_all_sorted); 1623 1624 void 1625 OBJ_NAME_do_all(int type, void (*fn)(const OBJ_NAME *, void *), void *arg) 1626 { 1627 OBJ_NAME_do_all_sorted(type, fn, arg); 1628 } 1629 LCRYPTO_ALIAS(OBJ_NAME_do_all); 1630 1631 static int 1632 cipher_cmp(const void *a, const void *b) 1633 { 1634 return strcmp(a, ((const struct cipher_name *)b)->name); 1635 } 1636 1637 const EVP_CIPHER * 1638 EVP_get_cipherbyname(const char *name) 1639 { 1640 const struct cipher_name *cipher; 1641 1642 if (!OPENSSL_init_crypto(0, NULL)) 1643 return NULL; 1644 1645 if (name == NULL) 1646 return NULL; 1647 1648 if ((cipher = bsearch(name, cipher_names, N_CIPHER_NAMES, 1649 sizeof(*cipher), cipher_cmp)) == NULL) 1650 return NULL; 1651 1652 return cipher->cipher(); 1653 } 1654 LCRYPTO_ALIAS(EVP_get_cipherbyname); 1655 1656 static int 1657 digest_cmp(const void *a, const void *b) 1658 { 1659 return strcmp(a, ((const struct digest_name *)b)->name); 1660 } 1661 1662 const EVP_MD * 1663 EVP_get_digestbyname(const char *name) 1664 { 1665 const struct digest_name *digest; 1666 1667 if (!OPENSSL_init_crypto(0, NULL)) 1668 return NULL; 1669 1670 if (name == NULL) 1671 return NULL; 1672 1673 if ((digest = bsearch(name, digest_names, N_DIGEST_NAMES, 1674 sizeof(*digest), digest_cmp)) == NULL) 1675 return NULL; 1676 1677 return digest->digest(); 1678 } 1679 LCRYPTO_ALIAS(EVP_get_digestbyname); 1680 1681 /* 1682 * XXX - this is here because most of its job was to clean up the dynamic 1683 * tables of ciphers and digests. If we get an evp_lib.c again, it should 1684 * probably move there. 1685 */ 1686 1687 void 1688 EVP_cleanup(void) 1689 { 1690 } 1691 LCRYPTO_ALIAS(EVP_cleanup); 1692