31 #include <wolfssl/crl.h> 48 #include <wolfssl/wolfcrypt/pkcs12.h> 76 #include <wolfssl/ocsp.h> 105 #ifdef HAVE_CURVE25519 112 #include <wolfssl/wolfcrypt/curve448.h> 118 #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) 119 #include <wolfssl/callbacks.h> 121 #ifdef WOLFSSL_CALLBACKS 125 #ifdef USE_WINDOWS_API 126 #ifdef WOLFSSL_GAME_BUILD 127 #include "system/xtl.h" 129 #if defined(_WIN32_WCE) || defined(WIN32_LEAN_AND_MEAN) 131 #include <winsock2.h> 135 #elif defined(THREADX) 136 #ifndef SINGLE_THREADED 140 #elif defined(WOLFSSL_DEOS) 142 #elif defined(MICRIUM) 144 #elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS) 146 #elif defined(EBSNET) 148 #elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) 150 #elif defined(FREESCALE_FREE_RTOS) 151 #include "fsl_os_abstraction.h" 152 #elif defined(WOLFSSL_uITRON4) 154 #elif defined(WOLFSSL_uTKERNEL2) 156 #elif defined(WOLFSSL_CMSIS_RTOS) 157 #include "cmsis_os.h" 158 #elif defined(WOLFSSL_CMSIS_RTOSv2) 159 #include "cmsis_os2.h" 160 #elif defined(WOLFSSL_MDK_ARM) 161 #if defined(WOLFSSL_MDK5) 162 #include "cmsis_os.h" 167 #elif defined(WOLFSSL_TIRTOS) 169 #elif defined(INTIME_RTOS) 171 #elif defined(WOLFSSL_NUCLEUS_1_2) 173 #elif defined(WOLFSSL_APACHE_MYNEWT) 174 #if !defined(WOLFSSL_LWIP) 175 void mynewt_ctx_clear(
void *ctx);
176 void* mynewt_ctx_new();
178 #elif defined(WOLFSSL_ZEPHYR) 179 #ifndef SINGLE_THREADED 182 #elif defined(WOLFSSL_TELIT_M2MB) 185 #ifndef SINGLE_THREADED 186 #define WOLFSSL_PTHREADS 189 #if defined(OPENSSL_EXTRA) && !defined(NO_FILESYSTEM) 204 #ifdef WOLFSSL_ASYNC_CRYPT 205 #include <wolfssl/wolfcrypt/async.h> 209 #ifdef WOLFCRYPT_HAVE_SRP 216 #pragma warning(disable: 4996) 220 #define WC_SHA_DIGEST_SIZE 20 224 #define WC_SHA256_DIGEST_SIZE 32 228 #define WC_MD5_DIGEST_SIZE 16 250 #if defined(WOLFSSL_MAX_STRENGTH) && \ 251 ((!defined(HAVE_ECC) && (defined(NO_DH) || defined(NO_RSA))) || \ 252 (!defined(HAVE_AESGCM) && !defined(HAVE_AESCCM) && \ 253 (!defined(HAVE_POLY1305) || !defined(HAVE_CHACHA))) || \ 254 (defined(NO_SHA256) && !defined(WOLFSSL_SHA384)) || \ 255 !defined(NO_OLD_TLS)) 257 #error "You are trying to build max strength with requirements disabled." 261 #if defined(HAVE_QSH) 262 #define BUILD_TLS_QSH 265 #ifndef WOLFSSL_NO_TLS12 267 #ifndef WOLFSSL_MAX_STRENGTH 269 #ifdef WOLFSSL_AEAD_ONLY 274 #ifndef WOLFSSL_AEAD_ONLY 275 #if !defined(NO_RSA) && !defined(NO_RC4) 276 #if defined(WOLFSSL_STATIC_RSA) 278 #define BUILD_SSL_RSA_WITH_RC4_128_SHA 281 #define BUILD_SSL_RSA_WITH_RC4_128_MD5 284 #if !defined(NO_TLS) && defined(HAVE_NTRU) && !defined(NO_SHA) \ 285 && defined(WOLFSSL_STATIC_RSA) 286 #define BUILD_TLS_NTRU_RSA_WITH_RC4_128_SHA 290 #if !defined(NO_RSA) && !defined(NO_DES3) 292 #if defined(WOLFSSL_STATIC_RSA) 293 #define BUILD_SSL_RSA_WITH_3DES_EDE_CBC_SHA 295 #if !defined(NO_TLS) && defined(HAVE_NTRU) \ 296 && defined(WOLFSSL_STATIC_RSA) 297 #define BUILD_TLS_NTRU_RSA_WITH_3DES_EDE_CBC_SHA 302 #if !defined(NO_RSA) && defined(HAVE_IDEA) 303 #if !defined(NO_SHA) && defined(WOLFSSL_STATIC_RSA) 304 #define BUILD_SSL_RSA_WITH_IDEA_CBC_SHA 309 #if !defined(NO_RSA) && !defined(NO_AES) && !defined(NO_TLS) 310 #if !defined(NO_SHA) && defined(HAVE_AES_CBC) 311 #if defined(WOLFSSL_STATIC_RSA) 312 #ifdef WOLFSSL_AES_128 313 #define BUILD_TLS_RSA_WITH_AES_128_CBC_SHA 315 #ifdef WOLFSSL_AES_256 316 #define BUILD_TLS_RSA_WITH_AES_256_CBC_SHA 319 #if defined(HAVE_NTRU) && defined(WOLFSSL_STATIC_RSA) 320 #ifdef WOLFSSL_AES_128 321 #define BUILD_TLS_NTRU_RSA_WITH_AES_128_CBC_SHA 323 #ifdef WOLFSSL_AES_256 324 #define BUILD_TLS_NTRU_RSA_WITH_AES_256_CBC_SHA 328 #if defined(WOLFSSL_STATIC_RSA) 329 #if !defined (NO_SHA256) && defined(HAVE_AES_CBC) 330 #ifdef WOLFSSL_AES_128 331 #define BUILD_TLS_RSA_WITH_AES_128_CBC_SHA256 333 #ifdef WOLFSSL_AES_256 334 #define BUILD_TLS_RSA_WITH_AES_256_CBC_SHA256 337 #if defined (HAVE_AESGCM) 338 #ifdef WOLFSSL_AES_128 339 #define BUILD_TLS_RSA_WITH_AES_128_GCM_SHA256 341 #if defined (WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 342 #define BUILD_TLS_RSA_WITH_AES_256_GCM_SHA384 345 #if defined (HAVE_AESCCM) 346 #ifdef WOLFSSL_AES_128 347 #define BUILD_TLS_RSA_WITH_AES_128_CCM_8 349 #ifdef WOLFSSL_AES_256 350 #define BUILD_TLS_RSA_WITH_AES_256_CCM_8 356 #if defined(HAVE_CAMELLIA) && !defined(NO_TLS) && !defined(NO_CAMELLIA_CBC) 358 #if defined(WOLFSSL_STATIC_RSA) 360 #define BUILD_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 361 #define BUILD_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 364 #define BUILD_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 365 #define BUILD_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 370 #define BUILD_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 371 #define BUILD_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 374 #define BUILD_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 375 #define BUILD_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 381 #if defined(WOLFSSL_STATIC_PSK) 382 #if !defined(NO_PSK) && !defined(NO_AES) && !defined(NO_TLS) 384 #ifdef WOLFSSL_AES_128 385 #define BUILD_TLS_PSK_WITH_AES_128_CBC_SHA 387 #ifdef WOLFSSL_AES_256 388 #define BUILD_TLS_PSK_WITH_AES_256_CBC_SHA 392 #ifdef WOLFSSL_AES_128 394 #define BUILD_TLS_PSK_WITH_AES_128_CBC_SHA256 397 #define BUILD_TLS_PSK_WITH_AES_128_GCM_SHA256 401 #ifdef WOLFSSL_AES_128 402 #define BUILD_TLS_PSK_WITH_AES_128_CCM_8 403 #define BUILD_TLS_PSK_WITH_AES_128_CCM 405 #ifdef WOLFSSL_AES_256 406 #define BUILD_TLS_PSK_WITH_AES_256_CCM_8 407 #define BUILD_TLS_PSK_WITH_AES_256_CCM 411 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 413 #define BUILD_TLS_PSK_WITH_AES_256_CBC_SHA384 416 #define BUILD_TLS_PSK_WITH_AES_256_GCM_SHA384 422 #if !defined(NO_TLS) && defined(HAVE_NULL_CIPHER) 424 #if defined(WOLFSSL_STATIC_RSA) 426 #define BUILD_TLS_RSA_WITH_NULL_MD5 429 #define BUILD_TLS_RSA_WITH_NULL_SHA 432 #define BUILD_TLS_RSA_WITH_NULL_SHA256 436 #if !defined(NO_PSK) && defined(WOLFSSL_STATIC_PSK) 438 #define BUILD_TLS_PSK_WITH_NULL_SHA 441 #define BUILD_TLS_PSK_WITH_NULL_SHA256 443 #ifdef WOLFSSL_SHA384 444 #define BUILD_TLS_PSK_WITH_NULL_SHA384 449 #if defined(WOLFSSL_STATIC_RSA) 450 #if !defined(NO_HC128) && !defined(NO_RSA) && !defined(NO_TLS) 452 #define BUILD_TLS_RSA_WITH_HC_128_MD5 455 #define BUILD_TLS_RSA_WITH_HC_128_SHA 459 #if !defined(NO_RABBIT) && !defined(NO_TLS) && !defined(NO_RSA) 461 #define BUILD_TLS_RSA_WITH_RABBIT_SHA 466 #if !defined(NO_DH) && !defined(NO_AES) && !defined(NO_TLS) && \ 470 #if defined(WOLFSSL_AES_128) && defined(HAVE_AES_CBC) 471 #define BUILD_TLS_DHE_RSA_WITH_AES_128_CBC_SHA 473 #if defined(WOLFSSL_AES_256) && defined(HAVE_AES_CBC) 474 #define BUILD_TLS_DHE_RSA_WITH_AES_256_CBC_SHA 476 #if !defined(NO_DES3) 477 #define BUILD_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 480 #if !defined(NO_SHA256) && defined(HAVE_AES_CBC) 481 #ifdef WOLFSSL_AES_128 482 #define BUILD_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 484 #ifdef WOLFSSL_AES_256 485 #define BUILD_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 490 #if defined(HAVE_ANON) && !defined(NO_TLS) && !defined(NO_DH) && \ 491 !defined(NO_AES) && !defined(NO_SHA) && defined(WOLFSSL_AES_128) 493 #define BUILD_TLS_DH_anon_WITH_AES_128_CBC_SHA 496 #if defined(WOLFSSL_SHA384) && defined(HAVE_AESGCM) 497 #define BUILD_TLS_DH_anon_WITH_AES_256_GCM_SHA384 501 #if !defined(NO_DH) && !defined(NO_PSK) && !defined(NO_TLS) 503 #if !defined(NO_AES) && defined(WOLFSSL_AES_128) && \ 504 defined(HAVE_AES_CBC) 505 #define BUILD_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 507 #ifdef HAVE_NULL_CIPHER 508 #define BUILD_TLS_DHE_PSK_WITH_NULL_SHA256 511 #ifdef WOLFSSL_SHA384 512 #if !defined(NO_AES) && defined(WOLFSSL_AES_256) && \ 513 defined(HAVE_AES_CBC) 514 #define BUILD_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 516 #ifdef HAVE_NULL_CIPHER 517 #define BUILD_TLS_DHE_PSK_WITH_NULL_SHA384 522 #if (defined(HAVE_ECC) || defined(HAVE_CURVE25519) || \ 523 defined(HAVE_CURVE448)) && !defined(NO_TLS) 525 #if !defined(NO_SHA) && defined(HAVE_AES_CBC) 527 #ifdef WOLFSSL_AES_128 528 #define BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 530 #ifdef WOLFSSL_AES_256 531 #define BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 533 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 534 #ifdef WOLFSSL_AES_128 535 #define BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 537 #ifdef WOLFSSL_AES_256 538 #define BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 543 #if defined(HAVE_ECC) || \ 544 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 545 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 546 #ifdef WOLFSSL_AES_128 547 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 549 #ifdef WOLFSSL_AES_256 550 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 554 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 555 #ifdef WOLFSSL_AES_128 556 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 558 #ifdef WOLFSSL_AES_256 559 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 563 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) && \ 564 defined(HAVE_AES_CBC) 566 #define BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 567 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 568 #define BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 571 #if defined(HAVE_ECC) || \ 572 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 573 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 574 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 576 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 577 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 581 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) && \ 582 defined(HAVE_AES_CBC) 584 #define BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 585 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 586 #define BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 589 #if defined(HAVE_ECC) || \ 590 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 591 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 592 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 594 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 595 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 599 #if defined (HAVE_AESGCM) 601 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 602 #ifdef WOLFSSL_AES_128 603 #define BUILD_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 606 #if defined(WOLFSSL_SHA384) 607 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 608 #ifdef WOLFSSL_AES_256 609 #define BUILD_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 615 #if defined(WOLFSSL_STATIC_DH) && defined(WOLFSSL_AES_128) && \ 617 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 620 #if defined(WOLFSSL_SHA384) 621 #if defined(WOLFSSL_STATIC_DH) && \ 622 defined(WOLFSSL_AES_256) && defined(HAVE_ECC) 623 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 631 #ifndef WOLFSSL_AEAD_ONLY 632 #define BUILD_TLS_ECDHE_RSA_WITH_RC4_128_SHA 634 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 635 #define BUILD_TLS_ECDH_RSA_WITH_RC4_128_SHA 639 #if defined(HAVE_ECC) || \ 640 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 641 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 642 #ifndef WOLFSSL_AEAD_ONLY 643 #define BUILD_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 646 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 647 #define BUILD_TLS_ECDH_ECDSA_WITH_RC4_128_SHA 651 #if !defined(NO_DES3) 654 #define BUILD_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 655 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 656 #define BUILD_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 660 #if defined(HAVE_ECC) || \ 661 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 662 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 663 #define BUILD_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 665 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 666 #define BUILD_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 670 #if defined(HAVE_NULL_CIPHER) 672 #if defined(HAVE_ECC) || \ 673 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 674 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 675 #define BUILD_TLS_ECDHE_ECDSA_WITH_NULL_SHA 678 #if !defined(NO_PSK) && !defined(NO_SHA256) 679 #define BUILD_TLS_ECDHE_PSK_WITH_NULL_SHA256 682 #if !defined(NO_PSK) && !defined(NO_SHA256) && !defined(NO_AES) && \ 683 defined(WOLFSSL_AES_128) && defined(HAVE_AES_CBC) 684 #define BUILD_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 687 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) && !defined(NO_SHA256) 688 #if !defined(NO_OLD_POLY1305) 689 #if defined(HAVE_ECC) || \ 690 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 691 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 692 #define BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_OLD_POLY1305_SHA256 694 #if !defined(NO_RSA) && defined(HAVE_ECC) 695 #define BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256 697 #if !defined(NO_DH) && !defined(NO_RSA) 698 #define BUILD_TLS_DHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256 702 #define BUILD_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 703 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || \ 705 #define BUILD_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 708 #define BUILD_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 715 #if !defined(NO_DH) && !defined(NO_AES) && !defined(NO_TLS) && \ 716 !defined(NO_RSA) && defined(HAVE_AESGCM) 718 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) 719 #define BUILD_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 722 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 723 #define BUILD_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 727 #if !defined(NO_DH) && !defined(NO_PSK) && !defined(NO_TLS) 729 #if defined(HAVE_AESGCM) && defined(WOLFSSL_AES_128) 730 #define BUILD_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 733 #ifdef WOLFSSL_AES_128 734 #define BUILD_TLS_DHE_PSK_WITH_AES_128_CCM 736 #ifdef WOLFSSL_AES_256 737 #define BUILD_TLS_DHE_PSK_WITH_AES_256_CCM 741 #if defined(WOLFSSL_SHA384) && defined(HAVE_AESGCM) && \ 742 defined(WOLFSSL_AES_256) 743 #define BUILD_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 747 #if (defined(HAVE_ECC) || defined(HAVE_CURVE25519) || defined(HAVE_CURVE448)) \ 748 && !defined(NO_TLS) && !defined(NO_AES) 750 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) 751 #if defined(HAVE_ECC) || \ 752 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 753 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 754 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 757 #define BUILD_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 760 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 761 #if defined(HAVE_ECC) || \ 762 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 763 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 764 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 767 #define BUILD_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 771 #if defined(HAVE_AESCCM) && !defined(NO_SHA256) 772 #if defined(HAVE_ECC) || \ 773 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 774 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 775 #ifdef WOLFSSL_AES_128 776 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CCM 777 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 779 #ifdef WOLFSSL_AES_256 780 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 786 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) && !defined(NO_SHA256) 787 #if defined(HAVE_ECC) || defined(HAVE_CURVE25519) || defined(HAVE_CURVE448) 788 #if defined(HAVE_ECC) || \ 789 (defined(HAVE_CURVE25519) && defined(HAVE_ED25519)) || \ 790 (defined(HAVE_CURVE448) && defined(HAVE_ED448)) 791 #define BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 794 #define BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 797 #if !defined(NO_DH) && !defined(NO_RSA) 798 #define BUILD_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 804 #if defined(WOLFSSL_TLS13) 806 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) 807 #define BUILD_TLS_AES_128_GCM_SHA256 809 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 810 #define BUILD_TLS_AES_256_GCM_SHA384 814 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) 816 #define BUILD_TLS_CHACHA20_POLY1305_SHA256 821 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) 822 #define BUILD_TLS_AES_128_CCM_SHA256 823 #define BUILD_TLS_AES_128_CCM_8_SHA256 826 #ifdef HAVE_NULL_CIPHER 828 #define BUILD_TLS_SHA256_SHA256 830 #ifdef WOLFSSL_SHA384 831 #define BUILD_TLS_SHA384_SHA384 836 #ifdef WOLFSSL_MULTICAST 837 #if defined(HAVE_NULL_CIPHER) && !defined(NO_SHA256) 838 #define BUILD_WDM_WITH_NULL_SHA256 842 #if defined(BUILD_SSL_RSA_WITH_RC4_128_SHA) || \ 843 defined(BUILD_SSL_RSA_WITH_RC4_128_MD5) 847 #if defined(BUILD_SSL_RSA_WITH_3DES_EDE_CBC_SHA) 851 #if defined(BUILD_TLS_RSA_WITH_AES_128_CBC_SHA) || \ 852 defined(BUILD_TLS_RSA_WITH_AES_256_CBC_SHA) || \ 853 defined(BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256) || \ 854 defined(BUILD_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256) 859 #if defined(BUILD_TLS_RSA_WITH_AES_128_GCM_SHA256) || \ 860 defined(BUILD_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256) || \ 861 defined(BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) || \ 862 defined(BUILD_TLS_PSK_WITH_AES_128_GCM_SHA256) || \ 863 defined(BUILD_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256) || \ 864 defined(BUILD_TLS_RSA_WITH_AES_256_GCM_SHA384) || \ 865 defined(BUILD_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384) || \ 866 defined(BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) || \ 867 defined(BUILD_TLS_PSK_WITH_AES_256_GCM_SHA384) || \ 868 defined(BUILD_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384) || \ 869 defined(BUILD_TLS_AES_128_GCM_SHA256) || \ 870 defined(BUILD_TLS_AES_256_GCM_SHA384) 874 #define NO_AESGCM_AEAD 877 #if defined(BUILD_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256) || \ 878 defined(BUILD_TLS_DHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256) || \ 879 defined(BUILD_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256) || \ 880 defined(BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256) || \ 881 defined(BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_OLD_POLY1305_SHA256) || \ 882 defined(BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256) || \ 883 defined(BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256) || \ 884 defined(BUILD_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256) || \ 885 defined(BUILD_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256) || \ 886 defined(BUILD_TLS_CHACHA20_POLY1305_SHA256) 890 #define NO_CHAPOL_AEAD 893 #if defined(BUILD_TLS_RSA_WITH_HC_128_SHA) || \ 894 defined(BUILD_TLS_RSA_WITH_HC_128_MD5) 898 #if defined(BUILD_TLS_RSA_WITH_RABBIT_SHA) 903 #define DES_BLOCK_SIZE 8 909 #if defined(NO_AES) || defined(NO_AES_DECRYPT) 910 #define AES_BLOCK_SIZE 16 923 #define CHACHA20_BLOCK_SIZE 16 926 #if defined(WOLFSSL_MAX_STRENGTH) || \ 927 (defined(HAVE_AESGCM) && !defined(NO_AESGCM_AEAD)) || \ 928 defined(HAVE_AESCCM) || \ 929 (defined(HAVE_CHACHA) && defined(HAVE_POLY1305) && \ 930 !defined(NO_CHAPOL_AEAD)) || \ 931 (defined(WOLFSSL_TLS13) && defined(HAVE_NULL_CIPHER)) 936 #if defined(WOLFSSL_MAX_STRENGTH) || \ 937 defined(HAVE_ECC) || !defined(NO_DH) 942 #if defined(BUILD_SSL_RSA_WITH_IDEA_CBC_SHA) 948 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x16,
949 TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x39,
950 TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x33,
951 TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x34,
952 TLS_RSA_WITH_AES_256_CBC_SHA = 0x35,
953 TLS_RSA_WITH_AES_128_CBC_SHA = 0x2F,
954 TLS_RSA_WITH_NULL_MD5 = 0x01,
955 TLS_RSA_WITH_NULL_SHA = 0x02,
956 TLS_PSK_WITH_AES_256_CBC_SHA = 0x8d,
957 TLS_PSK_WITH_AES_128_CBC_SHA256 = 0xae,
958 TLS_PSK_WITH_AES_256_CBC_SHA384 = 0xaf,
959 TLS_PSK_WITH_AES_128_CBC_SHA = 0x8c,
960 TLS_PSK_WITH_NULL_SHA256 = 0xb0,
961 TLS_PSK_WITH_NULL_SHA384 = 0xb1,
962 TLS_PSK_WITH_NULL_SHA = 0x2c,
963 SSL_RSA_WITH_RC4_128_SHA = 0x05,
964 SSL_RSA_WITH_RC4_128_MD5 = 0x04,
965 SSL_RSA_WITH_3DES_EDE_CBC_SHA = 0x0A,
966 SSL_RSA_WITH_IDEA_CBC_SHA = 0x07,
969 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0x14,
970 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0x13,
971 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0x0A,
972 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0x09,
973 TLS_ECDHE_RSA_WITH_RC4_128_SHA = 0x11,
974 TLS_ECDHE_ECDSA_WITH_RC4_128_SHA = 0x07,
975 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x12,
976 TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA = 0x08,
977 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0x27,
978 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0x23,
979 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0x28,
980 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0x24,
981 TLS_ECDHE_ECDSA_WITH_NULL_SHA = 0x06,
982 TLS_ECDHE_PSK_WITH_NULL_SHA256 = 0x3a,
983 TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 = 0x37,
986 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA = 0x0F,
987 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA = 0x0E,
988 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = 0x05,
989 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = 0x04,
990 TLS_ECDH_RSA_WITH_RC4_128_SHA = 0x0C,
991 TLS_ECDH_ECDSA_WITH_RC4_128_SHA = 0x02,
992 TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA = 0x0D,
993 TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA = 0x03,
994 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = 0x29,
995 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = 0x25,
996 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = 0x2A,
997 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = 0x26,
1000 TLS_RSA_WITH_HC_128_MD5 = 0xFB,
1001 TLS_RSA_WITH_HC_128_SHA = 0xFC,
1002 TLS_RSA_WITH_RABBIT_SHA = 0xFD,
1003 WDM_WITH_NULL_SHA256 = 0xFE,
1006 TLS_NTRU_RSA_WITH_RC4_128_SHA = 0xe5,
1007 TLS_NTRU_RSA_WITH_3DES_EDE_CBC_SHA = 0xe6,
1008 TLS_NTRU_RSA_WITH_AES_128_CBC_SHA = 0xe7,
1009 TLS_NTRU_RSA_WITH_AES_256_CBC_SHA = 0xe8,
1016 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x6b,
1017 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x67,
1018 TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x3d,
1019 TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x3c,
1020 TLS_RSA_WITH_NULL_SHA256 = 0x3b,
1021 TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 = 0xb2,
1022 TLS_DHE_PSK_WITH_NULL_SHA256 = 0xb4,
1025 TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 = 0xb3,
1026 TLS_DHE_PSK_WITH_NULL_SHA384 = 0xb5,
1029 TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x9c,
1030 TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x9d,
1031 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x9e,
1032 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x9f,
1033 TLS_DH_anon_WITH_AES_256_GCM_SHA384 = 0xa7,
1034 TLS_PSK_WITH_AES_128_GCM_SHA256 = 0xa8,
1035 TLS_PSK_WITH_AES_256_GCM_SHA384 = 0xa9,
1036 TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 = 0xaa,
1037 TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 = 0xab,
1040 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0x2b,
1041 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0x2c,
1042 TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = 0x2d,
1043 TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = 0x2e,
1044 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0x2f,
1045 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0x30,
1046 TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = 0x31,
1047 TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = 0x32,
1053 TLS_RSA_WITH_AES_128_CCM_8 = 0xa0,
1054 TLS_RSA_WITH_AES_256_CCM_8 = 0xa1,
1055 TLS_ECDHE_ECDSA_WITH_AES_128_CCM = 0xac,
1056 TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 = 0xae,
1057 TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 = 0xaf,
1058 TLS_PSK_WITH_AES_128_CCM = 0xa4,
1059 TLS_PSK_WITH_AES_256_CCM = 0xa5,
1060 TLS_PSK_WITH_AES_128_CCM_8 = 0xa8,
1061 TLS_PSK_WITH_AES_256_CCM_8 = 0xa9,
1062 TLS_DHE_PSK_WITH_AES_128_CCM = 0xa6,
1063 TLS_DHE_PSK_WITH_AES_256_CCM = 0xa7,
1066 TLS_RSA_WITH_CAMELLIA_128_CBC_SHA = 0x41,
1067 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA = 0x84,
1068 TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0xba,
1069 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 = 0xc0,
1070 TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA = 0x45,
1071 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA = 0x88,
1072 TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 = 0xbe,
1073 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 = 0xc4,
1076 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xa8,
1077 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 0xa9,
1078 TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xaa,
1079 TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 0xac,
1080 TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 = 0xab,
1081 TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 0xad,
1084 TLS_ECDHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256 = 0x13,
1085 TLS_ECDHE_ECDSA_WITH_CHACHA20_OLD_POLY1305_SHA256 = 0x14,
1086 TLS_DHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256 = 0x15,
1089 TLS_AES_128_GCM_SHA256 = 0x01,
1090 TLS_AES_256_GCM_SHA384 = 0x02,
1091 TLS_CHACHA20_POLY1305_SHA256 = 0x03,
1092 TLS_AES_128_CCM_SHA256 = 0x04,
1093 TLS_AES_128_CCM_8_SHA256 = 0x05,
1096 TLS_SHA256_SHA256 = 0xB4,
1097 TLS_SHA384_SHA384 = 0xB5,
1100 TLS_FALLBACK_SCSV = 0x56,
1102 TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0xff
1106 #ifndef WOLFSSL_SESSION_TIMEOUT 1107 #define WOLFSSL_SESSION_TIMEOUT 500 1112 #ifndef WOLFSSL_DTLS_WINDOW_WORDS 1113 #define WOLFSSL_DTLS_WINDOW_WORDS 2 1115 #define DTLS_WORD_BITS (sizeof(word32) * CHAR_BIT) 1116 #define DTLS_SEQ_BITS (WOLFSSL_DTLS_WINDOW_WORDS * DTLS_WORD_BITS) 1117 #define DTLS_SEQ_SZ (sizeof(word32) * WOLFSSL_DTLS_WINDOW_WORDS) 1119 #ifndef WOLFSSL_MULTICAST 1120 #define WOLFSSL_DTLS_PEERSEQ_SZ 1 1122 #ifndef WOLFSSL_MULTICAST_PEERS 1124 #define WOLFSSL_MULTICAST_PEERS 100 1126 #define WOLFSSL_DTLS_PEERSEQ_SZ WOLFSSL_MULTICAST_PEERS 1129 #ifndef WOLFSSL_MAX_MTU 1130 #define WOLFSSL_MAX_MTU 1500 1135 #ifndef WOLFSSL_MIN_DHKEY_BITS 1136 #ifdef WOLFSSL_MAX_STRENGTH 1137 #define WOLFSSL_MIN_DHKEY_BITS 2048 1139 #define WOLFSSL_MIN_DHKEY_BITS 1024 1142 #if (WOLFSSL_MIN_DHKEY_BITS % 8) 1143 #error DH minimum bit size must be multiple of 8 1145 #if (WOLFSSL_MIN_DHKEY_BITS > 16000) 1146 #error DH minimum bit size must not be greater than 16000 1148 #define MIN_DHKEY_SZ (WOLFSSL_MIN_DHKEY_BITS / 8) 1150 #ifndef WOLFSSL_MAX_DHKEY_BITS 1151 #if (defined(USE_FAST_MATH) && defined(FP_MAX_BITS) && FP_MAX_BITS >= 16384) 1152 #define WOLFSSL_MAX_DHKEY_BITS 8192 1154 #define WOLFSSL_MAX_DHKEY_BITS 4096 1157 #if (WOLFSSL_MAX_DHKEY_BITS % 8) 1158 #error DH maximum bit size must be multiple of 8 1160 #if (WOLFSSL_MAX_DHKEY_BITS > 16000) 1161 #error DH maximum bit size must not be greater than 16000 1163 #define MAX_DHKEY_SZ (WOLFSSL_MAX_DHKEY_BITS / 8) 1165 #ifndef MAX_PSK_ID_LEN 1167 #if defined(WOLFSSL_TLS13) 1168 #define MAX_PSK_ID_LEN 256 1170 #define MAX_PSK_ID_LEN 128 1174 #ifndef MAX_EARLY_DATA_SZ 1176 #define MAX_EARLY_DATA_SZ 4096 1187 SEND_BLANK_CERT = 2,
1191 DTLSv1_2_MINOR = 0xfd,
1198 TLS_DRAFT_MAJOR = 0x7f,
1199 #ifdef WOLFSSL_TLS13_DRAFT 1200 #ifdef WOLFSSL_TLS13_DRAFT_18 1201 TLS_DRAFT_MINOR = 0x12,
1202 #elif defined(WOLFSSL_TLS13_DRAFT_22) 1203 TLS_DRAFT_MINOR = 0x16,
1204 #elif defined(WOLFSSL_TLS13_DRAFT_23) 1205 TLS_DRAFT_MINOR = 0x17,
1206 #elif defined(WOLFSSL_TLS13_DRAFT_26) 1207 TLS_DRAFT_MINOR = 0x1a,
1209 TLS_DRAFT_MINOR = 0x1c,
1212 OLD_HELLO_ID = 0x01,
1213 INVALID_BYTE = 0xff,
1215 ZLIB_COMPRESSION = 221,
1216 HELLO_EXT_SIG_ALGO = 13,
1217 HELLO_EXT_EXTMS = 0x0017,
1218 SECRET_LEN = WOLFSSL_MAX_MASTER_KEY_LENGTH,
1220 #if defined(WOLFSSL_MYSQL_COMPATIBLE) || \ 1221 (defined(USE_FAST_MATH) && defined(FP_MAX_BITS) && FP_MAX_BITS > 8192) 1223 ENCRYPT_LEN = 1024 + MAX_PSK_ID_LEN + 2,
1229 ENCRYPT_LEN = 512 + MAX_PSK_ID_LEN + 2,
1236 MAX_RECORD_SIZE = 16384,
1237 MAX_PLAINTEXT_SZ = (1 << 14),
1238 MAX_TLS_CIPHER_SZ = (1 << 14) + 2048,
1239 #ifdef WOLFSSL_TLS13 1240 MAX_TLS13_PLAIN_SZ = (1 << 14) + 1,
1241 MAX_TLS13_ENC_SZ = (1 << 14) + 256,
1243 MAX_MSG_EXTRA = 38 + WC_MAX_DIGEST_SIZE,
1247 MAX_COMP_EXTRA = 1024,
1248 MAX_MTU = WOLFSSL_MAX_MTU,
1249 MAX_UDP_SIZE = 8192 - 100,
1250 MAX_DH_SZ = (MAX_DHKEY_SZ * 3) + 12,
1252 MAX_STR_VERSION = 8,
1265 MAX_DH_SIZE = MAX_DHKEY_SZ+1,
1267 NAMED_DH_MASK = 0x100,
1268 MIN_FFHDE_GROUP = 0x100,
1269 MAX_FFHDE_GROUP = 0x1FF,
1270 SESSION_HINT_SZ = 4,
1272 TICKET_NONCE_LEN_SZ = 1,
1273 DEF_TICKET_NONCE_SZ = 1,
1274 MAX_TICKET_NONCE_SZ = 8,
1275 MAX_LIFETIME = 604800,
1278 SEED_LEN = RAN_LEN * 2,
1280 COOKIE_SECRET_SZ = 14,
1281 MAX_COOKIE_LEN = 32,
1295 HANDSHAKE_HEADER_SZ = 4,
1296 RECORD_HEADER_SZ = 5,
1300 TRUNCATED_HMAC_SZ = 10,
1302 HELLO_EXT_TYPE_SZ = 2,
1303 HELLO_EXT_SZ_SZ = 2,
1304 HELLO_EXT_SIGALGO_SZ = 2,
1306 DTLS_HANDSHAKE_HEADER_SZ = 12,
1307 DTLS_RECORD_HEADER_SZ = 13,
1308 DTLS_HANDSHAKE_EXTRA = 8,
1309 DTLS_RECORD_EXTRA = 8,
1310 DTLS_HANDSHAKE_SEQ_SZ = 2,
1311 DTLS_HANDSHAKE_FRAG_SZ = 3,
1313 DTLS_EXPORT_PRO = 165,
1314 DTLS_EXPORT_STATE_PRO = 166,
1315 DTLS_EXPORT_VERSION = 4,
1316 DTLS_EXPORT_OPT_SZ = 60,
1317 DTLS_EXPORT_VERSION_3 = 3,
1318 DTLS_EXPORT_OPT_SZ_3 = 59,
1319 DTLS_EXPORT_KEY_SZ = 325 + (DTLS_SEQ_SZ * 2),
1321 DTLS_EXPORT_MIN_KEY_SZ = 85 + (DTLS_SEQ_SZ * 2),
1323 DTLS_EXPORT_SPC_SZ = 16,
1324 DTLS_EXPORT_LEN = 2,
1325 DTLS_EXPORT_IP = 46,
1326 MAX_EXPORT_BUFFER = 514,
1327 MAX_EXPORT_STATE_BUFFER = (DTLS_EXPORT_MIN_KEY_SZ) + (3 * DTLS_EXPORT_LEN),
1329 FINISHED_LABEL_SZ = 15,
1330 TLS_FINISHED_SZ = 12,
1331 EXT_MASTER_LABEL_SZ = 22,
1332 MASTER_LABEL_SZ = 13,
1334 PROTOCOL_LABEL_SZ = 9,
1336 MAX_HKDF_LABEL_SZ = OPAQUE16_LEN +
1337 OPAQUE8_LEN + PROTOCOL_LABEL_SZ + MAX_LABEL_SZ +
1338 OPAQUE8_LEN + WC_MAX_DIGEST_SIZE,
1339 MAX_REQUEST_SZ = 256,
1340 SESSION_FLUSH_COUNT = 256,
1341 TLS_MAX_PAD_SZ = 255,
1343 #
if defined(HAVE_FIPS) && \
1344 (!defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION < 2))
1345 MAX_SYM_KEY_SIZE = AES_256_KEY_SIZE,
1347 MAX_SYM_KEY_SIZE = WC_MAX_SYM_KEY_SIZE,
1350 #ifdef HAVE_SELFTEST 1351 #ifndef WOLFSSL_AES_KEY_SIZE_ENUM 1352 #define WOLFSSL_AES_KEY_SIZE_ENUM 1354 AES_128_KEY_SIZE = 16,
1355 AES_192_KEY_SIZE = 24,
1356 AES_256_KEY_SIZE = 32,
1360 MAX_IV_SZ = AES_BLOCK_SIZE,
1362 AEAD_SEQ_OFFSET = 4,
1363 AEAD_TYPE_OFFSET = 8,
1364 AEAD_VMAJ_OFFSET = 9,
1365 AEAD_VMIN_OFFSET = 10,
1366 AEAD_LEN_OFFSET = 11,
1367 AEAD_AUTH_DATA_SZ = 13,
1369 AESGCM_IMP_IV_SZ = 4,
1370 AESGCM_EXP_IV_SZ = 8,
1371 AESGCM_NONCE_SZ = AESGCM_EXP_IV_SZ + AESGCM_IMP_IV_SZ,
1373 CHACHA20_IMP_IV_SZ = 12,
1374 CHACHA20_NONCE_SZ = 12,
1375 CHACHA20_OLD_OFFSET = 4,
1379 AES_GCM_AUTH_SZ = 16,
1380 AES_CCM_16_AUTH_SZ = 16,
1381 AES_CCM_8_AUTH_SZ = 8,
1382 AESCCM_NONCE_SZ = 12,
1384 CAMELLIA_128_KEY_SIZE = 16,
1385 CAMELLIA_192_KEY_SIZE = 24,
1386 CAMELLIA_256_KEY_SIZE = 32,
1387 CAMELLIA_IV_SIZE = 16,
1389 CHACHA20_256_KEY_SIZE = 32,
1390 CHACHA20_128_KEY_SIZE = 16,
1391 CHACHA20_IV_SIZE = 12,
1393 POLY1305_AUTH_SZ = 16,
1397 HC_128_KEY_SIZE = 16,
1398 HC_128_IV_SIZE = 16,
1400 RABBIT_KEY_SIZE = 16,
1408 MAX_EXPORT_ECC_SZ = 256,
1409 MAX_CURVE_NAME_SZ = 16,
1412 ED25519_SA_MAJOR = 8,
1413 ED25519_SA_MINOR = 7,
1417 MIN_RSA_SHA512_PSS_BITS = 512 * 2 + 8 * 8,
1418 MIN_RSA_SHA384_PSS_BITS = 384 * 2 + 8 * 8,
1421 MAX_CERT_VERIFY_SZ = 4096 / 8,
1422 #elif defined(HAVE_ECC) 1423 MAX_CERT_VERIFY_SZ = ECC_MAX_SIG_SIZE,
1424 #elif defined(HAVE_ED448) 1425 MAX_CERT_VERIFY_SZ = ED448_SIG_SIZE,
1426 #elif defined(HAVE_ED25519) 1427 MAX_CERT_VERIFY_SZ = ED25519_SIG_SIZE,
1429 MAX_CERT_VERIFY_SZ = 1024,
1431 CLIENT_HELLO_FIRST = 35,
1432 MAX_SUITE_NAME = 48,
1434 DTLS_TIMEOUT_INIT = 1,
1435 DTLS_TIMEOUT_MAX = 64,
1436 DTLS_TIMEOUT_MULTIPLIER = 2,
1439 MAX_PSK_KEY_LEN = 64,
1441 MIN_PSK_BINDERS_LEN= 33,
1442 MAX_TICKET_AGE_SECS= 10,
1444 #ifndef MAX_WOLFSSL_FILE_SIZE 1445 MAX_WOLFSSL_FILE_SIZE = 1024ul * 1024ul * 4,
1448 MAX_X509_SIZE = 2048,
1449 CERT_MIN_SIZE = 256,
1451 MAX_NTRU_PUB_KEY_SZ = 1027,
1452 MAX_NTRU_ENCRYPT_SZ = 1027,
1453 MAX_NTRU_BITS = 256,
1462 INVALID_PEER_ID = 0xFFFF,
1472 #ifndef WOLFSSL_MIN_DOWNGRADE 1474 #define WOLFSSL_MIN_DOWNGRADE TLSv1_MINOR 1476 #define WOLFSSL_MIN_DOWNGRADE TLSv1_2_MINOR 1481 #define AEAD_MAX_IMP_SZ 12 1484 #define AEAD_MAX_EXP_SZ 8 1487 #ifndef WOLFSSL_MAX_SUITE_SZ 1488 #define WOLFSSL_MAX_SUITE_SZ 300 1493 #ifndef WOLFSSL_MAX_SIGALGO 1494 #define WOLFSSL_MAX_SIGALGO 32 1499 #ifndef WOLFSSL_MIN_ECC_BITS 1500 #ifdef WOLFSSL_MAX_STRENGTH 1501 #define WOLFSSL_MIN_ECC_BITS 256 1503 #define WOLFSSL_MIN_ECC_BITS 224 1506 #if (WOLFSSL_MIN_ECC_BITS % 8) 1512 #error ECC minimum bit size must be a multiple of 8 1514 #define MIN_ECCKEY_SZ (WOLFSSL_MIN_ECC_BITS / 8) 1517 #ifndef WOLFSSL_MIN_RSA_BITS 1518 #ifdef WOLFSSL_MAX_STRENGTH 1519 #define WOLFSSL_MIN_RSA_BITS 2048 1521 #define WOLFSSL_MIN_RSA_BITS 1024 1524 #if (WOLFSSL_MIN_RSA_BITS % 8) 1527 #error RSA minimum bit size must be a multiple of 8 1529 #define MIN_RSAKEY_SZ (WOLFSSL_MIN_RSA_BITS / 8) 1531 #ifdef SESSION_INDEX 1533 #define SESSIDX_ROW_SHIFT 4 1534 #define SESSIDX_IDX_MASK 0x0F 1539 #ifndef MAX_CHAIN_DEPTH 1540 #define MAX_CHAIN_DEPTH 9 1545 #ifndef MAX_CERTIFICATE_SZ 1546 #define MAX_CERTIFICATE_SZ \ 1548 (MAX_X509_SIZE + CERT_HEADER_SZ) * MAX_CHAIN_DEPTH 1552 #ifndef MAX_HANDSHAKE_SZ 1553 #define MAX_HANDSHAKE_SZ MAX_CERTIFICATE_SZ 1556 #ifndef SESSION_TICKET_LEN 1557 #define SESSION_TICKET_LEN 256 1560 #ifndef SESSION_TICKET_HINT_DEFAULT 1561 #define SESSION_TICKET_HINT_DEFAULT 300 1567 #define MAX_ENCRYPT_SZ MAX_NTRU_ENCRYPT_SZ 1569 #define MAX_ENCRYPT_SZ ENCRYPT_LEN 1577 SERVER_HELLOVERIFYREQUEST_COMPLETE,
1578 SERVER_HELLO_RETRY_REQUEST_COMPLETE,
1579 SERVER_HELLO_COMPLETE,
1580 SERVER_ENCRYPTED_EXTENSIONS_COMPLETE,
1581 SERVER_CERT_COMPLETE,
1582 SERVER_KEYEXCHANGE_COMPLETE,
1583 SERVER_HELLODONE_COMPLETE,
1584 SERVER_CHANGECIPHERSPEC_COMPLETE,
1585 SERVER_FINISHED_COMPLETE,
1588 CLIENT_HELLO_COMPLETE,
1589 CLIENT_KEYEXCHANGE_COMPLETE,
1590 CLIENT_CHANGECIPHERSPEC_COMPLETE,
1591 CLIENT_FINISHED_COMPLETE,
1613 #ifdef WOLFSSL_SESSION_EXPORT 1614 WOLFSSL_LOCAL
int wolfSSL_dtls_import_internal(
WOLFSSL* ssl, byte* buf,
1616 WOLFSSL_LOCAL
int wolfSSL_dtls_export_internal(
WOLFSSL* ssl, byte* buf,
1618 WOLFSSL_LOCAL
int wolfSSL_dtls_export_state_internal(
WOLFSSL* ssl,
1619 byte* buf, word32 sz);
1620 WOLFSSL_LOCAL
int wolfSSL_dtls_import_state_internal(
WOLFSSL* ssl,
1621 byte* buf, word32 sz);
1622 WOLFSSL_LOCAL
int wolfSSL_send_session(
WOLFSSL* ssl);
1643 WOLFSSL_LOCAL
int InitSSL_Suites(
WOLFSSL* ssl);
1644 WOLFSSL_LOCAL
int InitSSL_Side(
WOLFSSL* ssl, word16 side);
1647 WOLFSSL_LOCAL
int DoFinished(
WOLFSSL* ssl,
const byte* input, word32* inOutIdx,
1648 word32 size, word32 totalSz,
int sniff);
1649 WOLFSSL_LOCAL
int DoApplicationData(
WOLFSSL* ssl, byte* input, word32* inOutIdx);
1651 WOLFSSL_LOCAL
int HandleTlsResumption(
WOLFSSL* ssl,
int bogusID,
1653 #ifdef WOLFSSL_TLS13 1654 WOLFSSL_LOCAL
int FindSuite(
Suites* suites, byte first, byte second);
1656 WOLFSSL_LOCAL
int DoClientHello(
WOLFSSL* ssl,
const byte* input, word32*,
1658 #ifdef WOLFSSL_TLS13 1659 WOLFSSL_LOCAL
int DoTls13ClientHello(
WOLFSSL* ssl,
const byte* input,
1660 word32* inOutIdx, word32 helloSz);
1662 WOLFSSL_LOCAL
int DoServerHello(
WOLFSSL* ssl,
const byte* input, word32*,
1664 WOLFSSL_LOCAL
int CompleteServerHello(
WOLFSSL *ssl);
1666 WOLFSSL_LOCAL
int PickHashSigAlgo(
WOLFSSL* ssl,
const byte* hashSigAlgo,
1667 word32 hashSigAlgoSz);
1668 WOLFSSL_LOCAL
int DecodePrivateKey(
WOLFSSL *ssl, word16* length);
1669 #ifdef HAVE_PK_CALLBACKS 1670 WOLFSSL_LOCAL
int GetPrivateKeySigSize(
WOLFSSL* ssl);
1675 WOLFSSL_LOCAL
void FreeKeyExchange(
WOLFSSL* ssl);
1676 WOLFSSL_LOCAL
void FreeSuites(
WOLFSSL* ssl);
1677 WOLFSSL_LOCAL
int ProcessPeerCerts(
WOLFSSL* ssl, byte* input, word32* inOutIdx, word32 size);
1678 WOLFSSL_LOCAL
int MatchDomainName(
const char* pattern,
int len,
const char* str);
1680 WOLFSSL_LOCAL
int CheckAltNames(
DecodedCert* dCert,
char* domain);
1681 #ifdef OPENSSL_EXTRA 1682 WOLFSSL_LOCAL
int CheckIPAddr(
DecodedCert* dCert,
char* ipasc);
1685 WOLFSSL_LOCAL
int CreateTicket(
WOLFSSL* ssl);
1686 WOLFSSL_LOCAL
int HashOutputRaw(
WOLFSSL* ssl,
const byte* output,
int sz);
1687 WOLFSSL_LOCAL
int HashOutput(
WOLFSSL* ssl,
const byte* output,
int sz,
1689 WOLFSSL_LOCAL
int HashInput(
WOLFSSL* ssl,
const byte* input,
int sz);
1690 #if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 1691 WOLFSSL_LOCAL
int SNI_Callback(
WOLFSSL* ssl);
1693 #ifdef WOLFSSL_TLS13 1694 WOLFSSL_LOCAL
int DecryptTls13(
WOLFSSL* ssl, byte* output,
const byte* input,
1695 word16 sz,
const byte* aad, word16 aadSz);
1696 WOLFSSL_LOCAL
int DoTls13HandShakeMsgType(
WOLFSSL* ssl, byte* input,
1697 word32* inOutIdx, byte type,
1698 word32 size, word32 totalSz);
1699 WOLFSSL_LOCAL
int DoTls13HandShakeMsg(
WOLFSSL* ssl, byte* input,
1700 word32* inOutIdx, word32 totalSz);
1701 WOLFSSL_LOCAL
int DoTls13ServerHello(
WOLFSSL* ssl,
const byte* input,
1702 word32* inOutIdx, word32 helloSz,
1705 int TimingPadVerify(
WOLFSSL* ssl,
const byte* input,
int padLen,
int t,
1706 int pLen,
int content);
1717 #define COMP_EXTRA MAX_COMP_EXTRA 1719 #define COMP_EXTRA 0 1723 #ifdef WOLFSSL_SNIFFER 1724 #define MTU_EXTRA MAX_MTU * 3 1731 #ifdef WOLFSSL_CALLBACKS 1732 #undef LARGE_STATIC_BUFFERS 1733 #define LARGE_STATIC_BUFFERS 1738 #if defined(LARGE_STATIC_BUFFERS) 1739 #define RECORD_SIZE MAX_RECORD_SIZE 1742 #define RECORD_SIZE MAX_MTU 1744 #define RECORD_SIZE 128 1753 #ifndef STATIC_CHUNKS_ONLY 1754 #define OUTPUT_RECORD_SIZE MAX_RECORD_SIZE 1756 #define OUTPUT_RECORD_SIZE RECORD_SIZE 1767 #if defined(LARGE_STATIC_BUFFERS) 1768 #define STATIC_BUFFER_LEN RECORD_HEADER_SZ + RECORD_SIZE + COMP_EXTRA + \ 1769 MTU_EXTRA + MAX_MSG_EXTRA 1772 #define STATIC_BUFFER_LEN RECORD_HEADER_SZ 1776 ALIGN16 byte staticBuffer[STATIC_BUFFER_LEN];
1788 word16 hashSigAlgoSz;
1789 byte suites[WOLFSSL_MAX_SUITE_SZ];
1790 byte hashSigAlgo[WOLFSSL_MAX_SIGALGO];
1794 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 1800 WOLFSSL_LOCAL
void InitSuitesHashSigAlgo(
Suites* suites,
int haveECDSAsig,
1801 int haveRSAsig,
int haveAnon,
1802 int tls1_2,
int keySz);
1804 word16, word16, word16, word16, word16,
int);
1805 WOLFSSL_LOCAL
int MatchSuite(
WOLFSSL* ssl,
Suites* peerSuites);
1808 #ifndef PSK_TYPES_DEFINED 1809 typedef unsigned int (*wc_psk_client_callback)(
WOLFSSL*,
const char*,
char*,
1810 unsigned int,
unsigned char*,
unsigned int);
1811 typedef unsigned int (*wc_psk_server_callback)(
WOLFSSL*,
const char*,
1812 unsigned char*,
unsigned int);
1813 #ifdef WOLFSSL_TLS13 1814 typedef unsigned int (*wc_psk_client_tls13_callback)(
WOLFSSL*,
const char*,
1815 char*,
unsigned int,
unsigned char*,
unsigned int,
1817 typedef unsigned int (*wc_psk_server_tls13_callback)(
WOLFSSL*,
const char*,
1818 unsigned char*,
unsigned int,
const char**);
1821 #if defined(WOLFSSL_DTLS) && defined(WOLFSSL_SESSION_EXPORT) && \ 1822 !defined(WOLFSSL_DTLS_EXPORT_TYPES) 1823 typedef int (*wc_dtls_export)(
WOLFSSL* ssl,
1824 unsigned char* exportBuffer,
unsigned int sz,
void* userCtx);
1825 #define WOLFSSL_DTLS_EXPORT_TYPES 1829 #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) 1830 #define MAX_DESCRIPTION_SZ 255 1837 #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) 1838 char description[MAX_DESCRIPTION_SZ];
1839 unsigned long offset;
1840 unsigned int in_stack;
1860 wolfSSL_Mutex ocspLock;
1862 #if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || \ 1863 defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 1864 int(*statusCb)(
WOLFSSL*,
void*);
1869 #ifndef MAX_DATE_SIZE 1870 #define MAX_DATE_SIZE 32 1876 #define CRL_DIGEST_SIZE WC_SHA256_DIGEST_SIZE 1878 #define CRL_DIGEST_SIZE WC_SHA_DIGEST_SIZE 1888 byte issuerHash[CRL_DIGEST_SIZE];
1891 byte lastDate[MAX_DATE_SIZE];
1892 byte nextDate[MAX_DATE_SIZE];
1893 byte lastDateFormat;
1894 byte nextDateFormat;
1902 word32 signatureOID;
1903 #if !defined(NO_SKID) && !defined(NO_ASN) 1904 byte extAuthKeyIdSet;
1905 byte extAuthKeyId[KEYID_SIZE];
1919 #if defined(HAVE_CRL) && defined(NO_FILESYSTEM) 1920 #undef HAVE_CRL_MONITOR 1930 wolfSSL_Mutex crlLock;
1932 #ifdef HAVE_CRL_MONITOR 1933 pthread_cond_t cond;
1944 #ifdef WOLFSSL_TRUST_PEER_CERT 1950 #ifndef CA_TABLE_SIZE 1951 #define CA_TABLE_SIZE 11 1953 #ifdef WOLFSSL_TRUST_PEER_CERT 1954 #define TP_TABLE_SIZE 11 1959 Signer* caTable[CA_TABLE_SIZE];
1961 #ifdef WOLFSSL_TRUST_PEER_CERT 1963 wolfSSL_Mutex tpLock;
1967 #if !defined(NO_WOLFSSL_SERVER) && (defined(HAVE_CERTIFICATE_STATUS_REQUEST) \ 1968 || defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2)) 1971 char* ocspOverrideURL;
1973 #ifndef NO_WOLFSSL_CM_VERIFY 1974 VerifyCallback verifyCallback;
1976 CallbackCACache caCacheCallback;
1977 CbMissingCRL cbMissingCRL;
1979 CbOCSPRespFree ocspRespFreeCb;
1980 wolfSSL_Mutex caLock;
1986 byte ocspUseOverrideURL;
1987 byte ocspStaplingEnabled;
1992 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) 2003 long sz,
int format,
int err_val);
2007 #if !defined NOCERTS &&\ 2008 (!defined(NO_WOLFSSL_CLIENT) || !defined(WOLFSSL_NO_CLIENT_AUTH)) 2011 #ifdef WOLFSSL_TLS13 2021 #ifdef WOLFSSL_TLS13 2024 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) 2025 char untrustedDepth;
2030 #ifdef WOLFSSL_TRUST_PEER_CERT 2031 word16 haveTrustPeer:1;
2053 word32 window[WOLFSSL_DTLS_WINDOW_WORDS];
2059 word32 prevWindow[WOLFSSL_DTLS_WINDOW_WORDS];
2064 #ifdef WOLFSSL_MULTICAST 2066 word32 highwaterMark;
2071 #define MAX_WRITE_IV_SZ 16 2076 #if !defined(WOLFSSL_AEAD_ONLY) || defined(WOLFSSL_TLS13) 2077 byte client_write_MAC_secret[WC_MAX_DIGEST_SIZE];
2078 byte server_write_MAC_secret[WC_MAX_DIGEST_SIZE];
2080 byte client_write_key[MAX_SYM_KEY_SIZE];
2081 byte server_write_key[MAX_SYM_KEY_SIZE];
2082 byte client_write_IV[MAX_WRITE_IV_SZ];
2083 byte server_write_IV[MAX_WRITE_IV_SZ];
2084 #if defined(HAVE_AEAD) || defined(WOLFSSL_SESSION_EXPORT) 2085 byte aead_exp_IV[AEAD_MAX_EXP_SZ];
2086 byte aead_enc_imp_IV[AEAD_MAX_IMP_SZ];
2087 byte aead_dec_imp_IV[AEAD_MAX_IMP_SZ];
2090 word32 peer_sequence_number_hi;
2091 word32 peer_sequence_number_lo;
2092 word32 sequence_number_hi;
2093 word32 sequence_number_lo;
2099 #ifdef WOLFSSL_MULTICAST 2104 word16 dtls_peer_handshake_number;
2105 word16 dtls_expected_peer_handshake_number;
2108 word16 dtls_sequence_number_hi;
2109 word32 dtls_sequence_number_lo;
2110 word16 dtls_prev_sequence_number_hi;
2111 word32 dtls_prev_sequence_number_lo;
2112 word16 dtls_handshake_number;
2119 #ifdef WOLFSSL_TLS13 2120 byte updateResponseReq:1;
2121 byte keyUpdateRespond:1;
2123 #ifdef WOLFSSL_RENESAS_TSIP_TLS 2124 byte tsip_client_write_MAC_secret[TSIP_TLS_HMAC_KEY_INDEX_WORDSIZE];
2125 byte tsip_server_write_MAC_secret[TSIP_TLS_HMAC_KEY_INDEX_WORDSIZE];
2132 #ifdef HAVE_TLS_EXTENSIONS 2135 TLSX_SERVER_NAME = 0x0000,
2136 TLSX_MAX_FRAGMENT_LENGTH = 0x0001,
2137 TLSX_TRUSTED_CA_KEYS = 0x0003,
2138 TLSX_TRUNCATED_HMAC = 0x0004,
2139 TLSX_STATUS_REQUEST = 0x0005,
2140 TLSX_SUPPORTED_GROUPS = 0x000a,
2141 TLSX_EC_POINT_FORMATS = 0x000b,
2142 #if !defined(WOLFSSL_NO_SIGALG) 2143 TLSX_SIGNATURE_ALGORITHMS = 0x000d,
2145 TLSX_APPLICATION_LAYER_PROTOCOL = 0x0010,
2146 TLSX_STATUS_REQUEST_V2 = 0x0011,
2147 #if defined(HAVE_ENCRYPT_THEN_MAC) && !defined(WOLFSSL_AEAD_ONLY) 2148 TLSX_ENCRYPT_THEN_MAC = 0x0016,
2150 TLSX_QUANTUM_SAFE_HYBRID = 0x0018,
2151 TLSX_SESSION_TICKET = 0x0023,
2152 #ifdef WOLFSSL_TLS13 2153 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 2154 TLSX_PRE_SHARED_KEY = 0x0029,
2156 #ifdef WOLFSSL_EARLY_DATA 2157 TLSX_EARLY_DATA = 0x002a,
2159 TLSX_SUPPORTED_VERSIONS = 0x002b,
2160 TLSX_COOKIE = 0x002c,
2161 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 2162 TLSX_PSK_KEY_EXCHANGE_MODES = 0x002d,
2164 #ifdef WOLFSSL_POST_HANDSHAKE_AUTH 2165 TLSX_POST_HANDSHAKE_AUTH = 0x0031,
2167 #if defined(WOLFSSL_TLS13_DRAFT_18) || defined(WOLFSSL_TLS13_DRAFT_22) 2168 TLSX_KEY_SHARE = 0x0028,
2170 TLSX_SIGNATURE_ALGORITHMS_CERT = 0x0032,
2171 TLSX_KEY_SHARE = 0x0033,
2174 TLSX_RENEGOTIATION_INFO = 0xff01
2185 WOLFSSL_LOCAL
TLSX* TLSX_Find(
TLSX* list, TLSX_Type type);
2186 WOLFSSL_LOCAL
void TLSX_Remove(
TLSX** list, TLSX_Type type,
void* heap);
2187 WOLFSSL_LOCAL
void TLSX_FreeAll(
TLSX* list,
void* heap);
2188 WOLFSSL_LOCAL
int TLSX_SupportExtensions(
WOLFSSL* ssl);
2189 WOLFSSL_LOCAL
int TLSX_PopulateExtensions(
WOLFSSL* ssl, byte isRequest);
2191 #if defined(WOLFSSL_TLS13) || !defined(NO_WOLFSSL_CLIENT) 2192 WOLFSSL_LOCAL
int TLSX_GetRequestSize(
WOLFSSL* ssl, byte msgType,
2194 WOLFSSL_LOCAL
int TLSX_WriteRequest(
WOLFSSL* ssl, byte* output,
2195 byte msgType, word16* pOffset);
2198 #if defined(WOLFSSL_TLS13) || !defined(NO_WOLFSSL_SERVER) 2200 WOLFSSL_LOCAL
int TLSX_GetResponseSize(
WOLFSSL* ssl, byte msgType,
2202 WOLFSSL_LOCAL
int TLSX_WriteResponse(
WOLFSSL *ssl, byte* output, byte msgType,
2206 WOLFSSL_LOCAL
int TLSX_ParseVersion(
WOLFSSL* ssl, byte* input, word16 length,
2207 byte msgType,
int* found);
2208 WOLFSSL_LOCAL
int TLSX_Parse(
WOLFSSL* ssl, byte* input, word16 length,
2209 byte msgType,
Suites *suites);
2211 #elif defined(HAVE_SNI) \ 2212 || defined(HAVE_MAX_FRAGMENT) \ 2213 || defined(HAVE_TRUSTED_CA) \ 2214 || defined(HAVE_TRUNCATED_HMAC) \ 2215 || defined(HAVE_CERTIFICATE_STATUS_REQUEST) \ 2216 || defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2) \ 2217 || defined(HAVE_SUPPORTED_CURVES) \ 2218 || defined(HAVE_ALPN) \ 2219 || defined(HAVE_QSH) \ 2220 || defined(HAVE_SESSION_TICKET) \ 2221 || defined(HAVE_SECURE_RENEGOTIATION) \ 2222 || defined(HAVE_SERVER_RENEGOTIATION_INFO) 2224 #error Using TLS extensions requires HAVE_TLS_EXTENSIONS to be defined. 2233 union {
char* host_name; } data;
2236 #ifndef NO_WOLFSSL_SERVER 2241 WOLFSSL_LOCAL
int TLSX_UseSNI(
TLSX** extensions, byte type,
const void* data,
2242 word16 size,
void* heap);
2243 WOLFSSL_LOCAL byte TLSX_SNI_Status(
TLSX* extensions, byte type);
2244 WOLFSSL_LOCAL word16 TLSX_SNI_GetRequest(
TLSX* extensions, byte type,
2247 #ifndef NO_WOLFSSL_SERVER 2248 WOLFSSL_LOCAL
void TLSX_SNI_SetOptions(
TLSX* extensions, byte type,
2250 WOLFSSL_LOCAL
int TLSX_SNI_GetFromBuffer(
const byte* buffer, word32 bufferSz,
2251 byte type, byte* sni, word32* inOutSz);
2257 #ifdef HAVE_TRUSTED_CA 2266 WOLFSSL_LOCAL
int TLSX_UseTrustedCA(
TLSX** extensions, byte type,
2267 const byte*
id, word16 idSz,
void* heap);
2274 char* protocol_name;
2280 WOLFSSL_LOCAL
int TLSX_ALPN_GetRequest(
TLSX* extensions,
2281 void** data, word16 *dataSz);
2283 WOLFSSL_LOCAL
int TLSX_UseALPN(
TLSX** extensions,
const void* data,
2284 word16 size, byte options,
void* heap);
2286 WOLFSSL_LOCAL
int TLSX_ALPN_SetOptions(
TLSX** extensions,
const byte option);
2291 #ifdef HAVE_MAX_FRAGMENT 2293 WOLFSSL_LOCAL
int TLSX_UseMaxFragment(
TLSX** extensions, byte mfl,
void* heap);
2298 #ifdef HAVE_TRUNCATED_HMAC 2300 WOLFSSL_LOCAL
int TLSX_UseTruncatedHMAC(
TLSX** extensions,
void* heap);
2305 #ifdef HAVE_CERTIFICATE_STATUS_REQUEST 2314 #if defined(WOLFSSL_TLS13) && !defined(NO_WOLFSSL_SERVER) 2319 WOLFSSL_LOCAL
int TLSX_UseCertificateStatusRequest(
TLSX** extensions,
2320 byte status_type, byte options,
WOLFSSL* ssl,
void* heap,
int devId);
2322 WOLFSSL_LOCAL
int TLSX_CSR_InitRequest(
TLSX* extensions,
DecodedCert* cert,
2325 WOLFSSL_LOCAL
void* TLSX_CSR_GetRequest(
TLSX* extensions);
2326 WOLFSSL_LOCAL
int TLSX_CSR_ForceRequest(
WOLFSSL* ssl);
2331 #ifdef HAVE_CERTIFICATE_STATUS_REQUEST_V2 2343 WOLFSSL_LOCAL
int TLSX_UseCertificateStatusRequestV2(
TLSX** extensions,
2344 byte status_type, byte options,
void* heap,
int devId);
2346 WOLFSSL_LOCAL
int TLSX_CSR2_InitRequests(
TLSX* extensions,
DecodedCert* cert,
2347 byte isPeer,
void* heap);
2349 WOLFSSL_LOCAL
void* TLSX_CSR2_GetRequest(
TLSX* extensions, byte status_type,
2351 WOLFSSL_LOCAL
int TLSX_CSR2_ForceRequest(
WOLFSSL* ssl);
2356 #ifdef HAVE_SUPPORTED_CURVES 2368 WOLFSSL_LOCAL
int TLSX_UseSupportedCurve(
TLSX** extensions, word16 name,
2371 WOLFSSL_LOCAL
int TLSX_UsePointFormat(
TLSX** extensions, byte point,
2374 #ifndef NO_WOLFSSL_SERVER 2375 WOLFSSL_LOCAL
int TLSX_ValidateSupportedCurves(
WOLFSSL* ssl, byte first,
2377 WOLFSSL_LOCAL
int TLSX_SupportedCurve_CheckPriority(
WOLFSSL* ssl);
2378 WOLFSSL_LOCAL
int TLSX_SupportedFFDHE_Set(
WOLFSSL* ssl);
2380 WOLFSSL_LOCAL
int TLSX_SupportedCurve_Preferred(
WOLFSSL* ssl,
2381 int checkSupported);
2386 #if defined(HAVE_SECURE_RENEGOTIATION) \ 2387 || defined(HAVE_SERVER_RENEGOTIATION_INFO) 2389 enum key_cache_state {
2402 enum key_cache_state cache_status;
2403 byte client_verify_data[TLS_FINISHED_SZ];
2404 byte server_verify_data[TLS_FINISHED_SZ];
2405 byte subject_hash_set;
2406 byte subject_hash[KEYID_SIZE];
2410 WOLFSSL_LOCAL
int TLSX_UseSecureRenegotiation(
TLSX** extensions,
void* heap);
2412 #ifdef HAVE_SERVER_RENEGOTIATION_INFO 2413 WOLFSSL_LOCAL
int TLSX_AddEmptyRenegotiationInfo(
TLSX** extensions,
void* heap);
2419 #ifdef HAVE_SESSION_TICKET 2423 #ifdef WOLFSSL_TLS13 2431 WOLFSSL_LOCAL
int TLSX_UseSessionTicket(
TLSX** extensions,
2433 WOLFSSL_LOCAL
SessionTicket* TLSX_SessionTicket_Create(word32 lifetime,
2434 byte* data, word16 size,
void* heap);
2435 WOLFSSL_LOCAL
void TLSX_SessionTicket_Free(
SessionTicket* ticket,
void* heap);
2463 WOLFSSL_LOCAL
int TLSX_QSHCipher_Parse(
WOLFSSL* ssl,
const byte* input,
2464 word16 length, byte isServer);
2465 WOLFSSL_LOCAL word16 TLSX_QSHPK_Write(
QSHScheme* list, byte* output);
2466 WOLFSSL_LOCAL word16 TLSX_QSH_GetSize(
QSHScheme* list, byte isRequest);
2469 WOLFSSL_LOCAL
int TLSX_UseQSHScheme(
TLSX** extensions, word16 name,
2470 byte* pKey, word16 pKeySz,
void* heap);
2473 WOLFSSL_LOCAL
int QSH_Decrypt(
QSHKey* key, byte* in, word32 szIn,
2474 byte* out, word16* szOut);
2475 #ifndef NO_WOLFSSL_SERVER 2476 WOLFSSL_LOCAL
int TLSX_ValidateQSHScheme(
TLSX** extensions, word16 name);
2481 #ifdef WOLFSSL_TLS13 2488 WOLFSSL_LOCAL
int TLSX_Cookie_Use(
WOLFSSL* ssl, byte* data, word16 len,
2489 byte* mac, byte macSz,
int resp);
2506 WOLFSSL_LOCAL
int TLSX_KeyShare_Use(
WOLFSSL* ssl, word16 group, word16 len,
2508 WOLFSSL_LOCAL
int TLSX_KeyShare_Empty(
WOLFSSL* ssl);
2509 WOLFSSL_LOCAL
int TLSX_KeyShare_Establish(
WOLFSSL* ssl);
2510 WOLFSSL_LOCAL
int TLSX_KeyShare_DeriveSecret(
WOLFSSL* ssl);
2513 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 2514 #ifndef WOLFSSL_TLS13_DRAFT_18 2520 byte data[MAX_TICKET_NONCE_SZ];
2532 byte binder[WC_MAX_DIGEST_SIZE];
2539 WOLFSSL_LOCAL
int TLSX_PreSharedKey_WriteBinders(
PreSharedKey* list,
2540 byte* output, byte msgType,
2542 WOLFSSL_LOCAL
int TLSX_PreSharedKey_GetSizeBinders(
PreSharedKey* list,
2543 byte msgType, word16* pSz);
2544 WOLFSSL_LOCAL
int TLSX_PreSharedKey_Use(
WOLFSSL* ssl, byte* identity,
2545 word16 len, word32 age, byte hmac,
2546 byte cipherSuite0, byte cipherSuite,
2551 enum PskKeyExchangeMode {
2557 #ifndef WOLFSSL_DEF_PSK_CIPHER 2558 #define WOLFSSL_DEF_PSK_CIPHER TLS_AES_128_GCM_SHA256 2561 WOLFSSL_LOCAL
int TLSX_PskKeModes_Use(
WOLFSSL* ssl, byte modes);
2563 #ifdef WOLFSSL_EARLY_DATA 2564 WOLFSSL_LOCAL
int TLSX_EarlyData_Use(
WOLFSSL* ssl, word32 max);
2570 enum DeriveKeyType {
2579 enum KeyUpdateRequest {
2580 update_not_requested,
2586 #ifdef OPENSSL_EXTRA 2588 WOLFSSL_CBIO_NONE = 0,
2589 WOLFSSL_CBIO_RECV = 0x1,
2590 WOLFSSL_CBIO_SEND = 0x2,
2597 #ifdef SINGLE_THREADED 2600 wolfSSL_Mutex countMutex;
2611 #if defined(OPENSSL_EXTRA) || defined(WOLFSSL_EXTRA) 2614 #if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || \ 2615 defined(WOLFSSL_NGINX) || defined (WOLFSSL_HAPROXY) 2617 client_cert_cb CBClientCert;
2619 #ifdef WOLFSSL_TLS13 2623 byte privateKeyType:7;
2624 byte privateKeyId:1;
2626 int privateKeyDevId;
2629 #ifdef KEEP_OUR_CERT 2639 byte failNoCertxPSK:1;
2640 byte sessionCacheOff:1;
2641 byte sessionCacheFlushOff:1;
2642 #ifdef HAVE_EXT_CACHE 2643 byte internalCacheOff:1;
2650 byte haveECDSAsig:1;
2651 byte haveStaticECC:1;
2652 byte partialWrite:1;
2653 byte quietShutdown:1;
2654 byte groupMessages:1;
2657 byte useClientOrder:1;
2658 #ifdef WOLFSSL_TLS13 2659 byte noTicketTls13:1;
2663 #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) 2664 byte postHandshakeAuth:1;
2667 #if !defined(WOLFSSL_OLD_PRIME_CHECK) && !defined(HAVE_FIPS) && \ 2668 !defined(HAVE_SELFTEST) 2672 #ifdef HAVE_SECURE_RENEGOTIATION 2673 byte useSecureReneg:1;
2675 #ifdef HAVE_ENCRYPT_THEN_MAC 2676 byte disallowEncThenMac:1;
2678 #ifdef WOLFSSL_STATIC_MEMORY 2681 #ifdef WOLFSSL_MULTICAST 2685 #if defined(WOLFSSL_SCTP) && defined(WOLFSSL_DTLS) 2688 #if (defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU)) && \ 2689 defined(WOLFSSL_DTLS) 2699 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) 2702 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) 2705 #ifdef OPENSSL_EXTRA 2706 byte sessionCtx[ID_LEN];
2707 word32 disabledCurves;
2708 const unsigned char *alpn_cli_protos;
2709 unsigned int alpn_cli_protos_len;
2712 CallbackInfoState* CBIS;
2714 CallbackIORecv CBIORecv;
2715 CallbackIOSend CBIOSend;
2717 CallbackGenCookie CBIOCookie;
2718 #ifdef WOLFSSL_SESSION_EXPORT 2719 wc_dtls_export dtls_export;
2720 CallbackGetPeer CBGetPeer;
2721 CallbackSetPeer CBSetPeer;
2724 VerifyCallback verifyCallback;
2726 CertVerifyCallback verifyCertCb;
2727 void* verifyCertCbArg;
2730 #if defined(HAVE_ECC) || defined(HAVE_CURVE25519) || defined(HAVE_ED448) 2731 word32 ecdhCurveOID;
2734 word16 eccTempKeySz;
2736 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) 2739 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 2741 wc_psk_client_callback client_psk_cb;
2742 wc_psk_server_callback server_psk_cb;
2743 #ifdef WOLFSSL_TLS13 2744 wc_psk_client_tls13_callback client_psk_tls13_cb;
2745 wc_psk_server_tls13_callback server_psk_tls13_cb;
2747 char server_hint[MAX_PSK_ID_LEN + NULL_TERM_LEN];
2749 #ifdef WOLFSSL_TLS13 2750 word16 group[WOLFSSL_MAX_GROUP_COUNT];
2753 #ifdef WOLFSSL_EARLY_DATA 2754 word32 maxEarlyDataSz;
2759 #ifdef WOLFSSL_ENCRYPTED_KEYS 2760 pem_password_cb* passwd_cb;
2761 void* passwd_userdata;
2763 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) 2770 WOLFSSL_CRYPTO_EX_DATA ex_data;
2772 #if defined(HAVE_ALPN) && (defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)) 2773 CallbackALPNSelect alpnSelect;
2774 void* alpnSelectArg;
2776 #if defined(OPENSSL_ALL) || (defined(OPENSSL_EXTRA) && (defined(HAVE_STUNNEL) || \ 2777 defined(WOLFSSL_NGINX) || defined(HAVE_LIGHTY) || \ 2778 defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_OPENSSH) )) 2779 CallbackSniRecv sniRecvCb;
2782 #if defined(WOLFSSL_MULTICAST) && defined(WOLFSSL_DTLS) 2783 CallbackMcastHighwater mcastHwCb;
2784 word32 mcastFirstSeq;
2785 word32 mcastSecondSeq;
2792 #ifdef HAVE_TLS_EXTENSIONS 2794 #ifndef NO_WOLFSSL_SERVER 2795 #if defined(HAVE_CERTIFICATE_STATUS_REQUEST) \ 2796 || defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2) 2799 #if defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2) 2803 #if defined(HAVE_SESSION_TICKET) && !defined(NO_WOLFSSL_SERVER) 2804 SessionTicketEncCb ticketEncCb;
2808 #ifdef HAVE_SUPPORTED_CURVES 2813 CallbackMacEncrypt MacEncryptCb;
2814 CallbackDecryptVerify DecryptVerifyCb;
2815 #ifdef HAVE_ENCRYPT_THEN_MAC 2816 CallbackEncryptMac EncryptMacCb;
2817 CallbackVerifyDecrypt VerifyDecryptCb;
2820 #ifdef HAVE_PK_CALLBACKS 2822 CallbackEccKeyGen EccKeyGenCb;
2823 CallbackEccSign EccSignCb;
2824 CallbackEccVerify EccVerifyCb;
2825 CallbackEccSharedSecret EccSharedSecretCb;
2828 CallbackEd25519Sign Ed25519SignCb;
2830 CallbackEd25519Verify Ed25519VerifyCb;
2832 #ifdef HAVE_CURVE25519 2834 CallbackX25519KeyGen X25519KeyGenCb;
2836 CallbackX25519SharedSecret X25519SharedSecretCb;
2840 CallbackEd448Sign Ed448SignCb;
2842 CallbackEd448Verify Ed448VerifyCb;
2844 #ifdef HAVE_CURVE448 2846 CallbackX448KeyGen X448KeyGenCb;
2848 CallbackX448SharedSecret X448SharedSecretCb;
2852 CallbackDhAgree DhAgreeCb;
2855 CallbackRsaSign RsaSignCb;
2856 CallbackRsaVerify RsaVerifyCb;
2857 CallbackRsaVerify RsaSignCheckCb;
2859 CallbackRsaPssSign RsaPssSignCb;
2860 CallbackRsaPssVerify RsaPssVerifyCb;
2861 CallbackRsaPssVerify RsaPssSignCheckCb;
2863 CallbackRsaEnc RsaEncCb;
2864 CallbackRsaDec RsaDecCb;
2867 #ifdef HAVE_WOLF_EVENT 2870 #ifdef HAVE_EXT_CACHE 2875 #if defined(OPENSSL_EXTRA) && defined(WOLFCRYPT_HAVE_SRP) && !defined(NO_SHA256) 2889 int DeriveTlsKeys(
WOLFSSL* ssl);
2891 int ProcessOldClientHello(
WOLFSSL* ssl,
const byte* input, word32* inOutIdx,
2892 word32 inSz, word16 sz);
2899 #ifdef WOLFSSL_TRUST_PEER_CERT 2913 word16 aead_mac_size;
2914 byte bulk_cipher_algorithm;
2929 enum KeyExchangeAlgorithm {
2938 ecc_diffie_hellman_kea,
2939 ecc_static_diffie_hellman_kea
2944 enum SignatureAlgorithm {
2945 anonymous_sa_algo = 0,
2948 ecc_dsa_sa_algo = 3,
2949 rsa_pss_sa_algo = 8,
2950 ed25519_sa_algo = 9,
2951 rsa_pss_pss_algo = 10,
2955 #define PSS_RSAE_TO_PSS_PSS(macAlgo) \ 2956 (macAlgo + (pss_sha256 - sha256_mac)) 2958 #define PSS_PSS_HASH_TO_MAC(macAlgo) \ 2959 (macAlgo - (pss_sha256 - sha256_mac)) 2975 enum ClientCertificateType {
2980 rsa_ephemeral_dh = 5,
2981 dss_ephemeral_dh = 6,
2982 fortezza_kea_cert = 20,
2984 rsa_fixed_ecdh = 65,
2985 ecdsa_fixed_ecdh = 66
2989 #ifndef WOLFSSL_AEAD_ONLY 2990 enum CipherType { stream, block, aead };
2992 enum CipherType { aead };
2996 #if defined(BUILD_AES) || defined(BUILD_AESGCM) || (defined(HAVE_CHACHA) && \ 2997 defined(HAVE_POLY1305)) || defined(WOLFSSL_TLS13) 2998 #define CIPHER_NONCE 3010 #if defined(BUILD_AES) || defined(BUILD_AESGCM) 3012 #if (defined(BUILD_AESGCM) || defined(HAVE_AESCCM)) && \ 3013 !defined(WOLFSSL_NO_TLS12) 3020 #ifdef HAVE_CAMELLIA 3035 #if defined(WOLFSSL_TLS13) && defined(HAVE_NULL_CIPHER) 3043 #ifdef HAVE_ONE_TIME_AUTH 3046 #ifdef HAVE_POLY1305 3055 WOLFSSL_LOCAL
void InitCiphers(
WOLFSSL* ssl);
3056 WOLFSSL_LOCAL
void FreeCiphers(
WOLFSSL* ssl);
3061 #if !defined(NO_MD5) && !defined(NO_OLD_TLS) 3062 byte md5[WC_MD5_DIGEST_SIZE];
3064 #if !defined(NO_SHA) 3065 byte sha[WC_SHA_DIGEST_SIZE];
3068 byte sha256[WC_SHA256_DIGEST_SIZE];
3070 #ifdef WOLFSSL_SHA384 3071 byte sha384[WC_SHA384_DIGEST_SIZE];
3073 #ifdef WOLFSSL_SHA512 3074 byte sha512[WC_SHA512_DIGEST_SIZE];
3078 WOLFSSL_LOCAL
int BuildCertHashes(
WOLFSSL* ssl,
Hashes* hashes);
3080 #ifdef WOLFSSL_TLS13 3082 #ifndef NO_WOLFSSL_SHA256 3085 #ifdef WOLFSSL_SHA384 3088 #ifdef WOLFSSL_SHA512 3097 byte buffer[MAX_X509_SIZE];
3112 byte sessionID[ID_LEN];
3114 byte masterSecret[SECRET_LEN];
3116 #ifdef SESSION_CERTS 3117 #ifdef OPENSSL_EXTRA 3121 #ifdef WOLFSSL_ALT_CERT_CHAINS 3125 #if defined(SESSION_CERTS) || (defined(WOLFSSL_TLS13) && \ 3126 defined(HAVE_SESSION_TICKET)) 3129 #if defined(SESSION_CERTS) || !defined(NO_RESUME_SUITE_CHECK) || \ 3130 (defined(WOLFSSL_TLS13) && defined(HAVE_SESSION_TICKET)) 3134 #ifndef NO_CLIENT_CACHE 3136 byte serverID[SERVER_ID_LEN];
3138 #ifdef OPENSSL_EXTRA 3140 byte sessionCtx[ID_LEN];
3142 #ifdef WOLFSSL_TLS13 3145 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 3146 #ifdef WOLFSSL_TLS13 3149 #ifndef WOLFSSL_TLS13_DRAFT_18 3153 #ifdef WOLFSSL_EARLY_DATA 3154 word32 maxEarlyDataSz;
3157 #ifdef HAVE_SESSION_TICKET 3160 byte staticTicket[SESSION_TICKET_LEN];
3163 #ifdef HAVE_EXT_CACHE 3167 WOLFSSL_CRYPTO_EX_DATA ex_data;
3177 typedef int (*hmacfp) (
WOLFSSL*, byte*,
const byte*, word32, int, int, int);
3179 #ifndef NO_CLIENT_CACHE 3203 ACCEPT_CLIENT_HELLO_DONE,
3204 ACCEPT_HELLO_RETRY_REQUEST_DONE,
3205 ACCEPT_FIRST_REPLY_DONE,
3207 SERVER_EXTENSIONS_SENT,
3214 ACCEPT_SECOND_REPLY_DONE,
3217 ACCEPT_FINISHED_DONE,
3218 ACCEPT_THIRD_REPLY_DONE
3222 enum AcceptStateTls13 {
3223 TLS13_ACCEPT_BEGIN = 0,
3224 TLS13_ACCEPT_BEGIN_RENEG,
3225 TLS13_ACCEPT_CLIENT_HELLO_DONE,
3226 TLS13_ACCEPT_HELLO_RETRY_REQUEST_DONE,
3227 TLS13_ACCEPT_FIRST_REPLY_DONE,
3228 TLS13_ACCEPT_SECOND_REPLY_DONE,
3229 TLS13_SERVER_HELLO_SENT,
3230 TLS13_ACCEPT_THIRD_REPLY_DONE,
3231 TLS13_SERVER_EXTENSIONS_SENT,
3232 TLS13_CERT_REQ_SENT,
3234 TLS13_CERT_VERIFY_SENT,
3235 TLS13_ACCEPT_FINISHED_SENT,
3236 TLS13_PRE_TICKET_SENT,
3237 TLS13_ACCEPT_FINISHED_DONE,
3246 buffer clearOutputBuffer;
3254 byte weOwnCertChain;
3260 buffer serverDH_Pub;
3261 buffer serverDH_Priv;
3262 DhKey* serverDH_Key;
3273 #ifdef WOLFSSL_TLS13 3278 #ifdef WOLFSSL_SEND_HRR_COOKIE 3279 buffer tls13CookieSecret;
3283 #ifndef NO_WOLFSSL_SERVER 3284 buffer dtlsCookieSecret;
3287 #ifdef HAVE_PK_CALLBACKS 3289 buffer peerEccDsaKey;
3292 buffer peerEd25519Key;
3295 buffer peerEd448Key;
3305 TLS_ASYNC_BEGIN = 0,
3314 enum buildMsgState {
3315 BUILD_MSG_BEGIN = 0,
3318 BUILD_MSG_VERIFY_MAC,
3320 BUILD_MSG_ENCRYPTED_VERIFY_MAC,
3325 CIPHER_STATE_BEGIN = 0,
3332 wc_psk_client_callback client_psk_cb;
3333 wc_psk_server_callback server_psk_cb;
3334 #ifdef WOLFSSL_TLS13 3335 wc_psk_client_tls13_callback client_psk_tls13_cb;
3336 wc_psk_server_tls13_callback server_psk_tls13_cb;
3339 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) 3344 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 3347 word16 sendVerify:2;
3348 word16 sessionCacheOff:1;
3349 word16 sessionCacheFlushOff:1;
3350 #ifdef HAVE_EXT_CACHE 3351 word16 internalCacheOff:1;
3354 word16 verifyPeer:1;
3355 word16 verifyNone:1;
3356 word16 failNoCert:1;
3357 word16 failNoCertxPSK:1;
3360 word16 haveSessionId:1;
3367 word16 closeNotify:1;
3368 word16 sentNotify:1;
3369 word16 usingCompression:1;
3375 word16 haveECDSAsig:1;
3376 word16 haveStaticECC:1;
3377 word16 havePeerCert:1;
3378 word16 havePeerVerify:1;
3379 word16 usingPSK_cipher:1;
3380 word16 usingAnon_cipher:1;
3381 word16 noPskDheKe:1;
3382 word16 sendAlertState:1;
3383 word16 partialWrite:1;
3384 word16 quietShutdown:1;
3386 word16 groupMessages:1;
3387 word16 saveArrays:1;
3391 #ifdef HAVE_POLY1305 3397 #ifdef HAVE_SESSION_TICKET 3398 word16 createTicket:1;
3400 word16 rejectTicket:1;
3401 #ifdef WOLFSSL_TLS13 3402 word16 noTicketTls13:1;
3406 word16 dtlsUseNonblock:1;
3407 word16 dtlsHsRetain:1;
3413 #if defined(HAVE_TLS_EXTENSIONS) && defined(HAVE_SUPPORTED_CURVES) 3414 word16 userCurves:1;
3416 word16 keepResources:1;
3417 word16 useClientOrder:1;
3418 word16 mutualAuth:1;
3419 #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) 3420 word16 postHandshakeAuth:1;
3423 #if defined(WOLFSSL_TLS13) && !defined(NO_WOLFSSL_SERVER) 3424 word16 sendCookie:1;
3426 #ifdef WOLFSSL_ALT_CERT_CHAINS 3427 word16 usingAltCertChain:1;
3429 #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_TLS13_MIDDLEBOX_COMPAT) 3430 word16 sentChangeCipher:1;
3432 #if !defined(WOLFSSL_NO_CLIENT_AUTH) && \ 3433 ((defined(HAVE_ED25519) && !defined(NO_ED25519_CLIENT_AUTH)) || \ 3434 (defined(HAVE_ED448) && !defined(NO_ED448_CLIENT_AUTH))) 3435 word16 cacheMessages:1;
3438 #if !defined(WOLFSSL_OLD_PRIME_CHECK) && \ 3439 !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST) 3440 word16 dhDoKeyTest:1;
3441 word16 dhKeyTested:1;
3444 #ifdef SINGLE_THREADED 3447 #ifdef HAVE_ENCRYPT_THEN_MAC 3448 word16 disallowEncThenMac:1;
3449 word16 encThenMac:1;
3450 word16 startedETMRead:1;
3451 word16 startedETMWrite:1;
3460 byte handShakeState;
3468 #ifdef WOLFSSL_MULTICAST 3479 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) 3482 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) 3485 #ifdef WOLFSSL_EARLY_DATA 3487 word32 maxEarlyDataSz;
3489 #ifdef WOLFSSL_TLS13 3496 byte* preMasterSecret;
3498 word32 pendingMsgSz;
3499 word32 pendingMsgOffset;
3500 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 3502 char client_identity[MAX_PSK_ID_LEN + NULL_TERM_LEN];
3503 char server_hint[MAX_PSK_ID_LEN + NULL_TERM_LEN];
3504 byte psk_key[MAX_PSK_KEY_LEN];
3506 byte clientRandom[RAN_LEN];
3507 byte serverRandom[RAN_LEN];
3508 byte sessionID[ID_LEN];
3510 #ifdef WOLFSSL_TLS13 3511 byte secret[SECRET_LEN];
3513 byte masterSecret[SECRET_LEN];
3514 #if defined(WOLFSSL_RENESAS_TSIP_TLS) && \ 3515 !defined(NO_WOLFSSL_RENESAS_TSIP_TLS_SESSION) 3516 byte tsip_masterSecret[TSIP_TLS_MASTERSECRET_SIZE];
3519 byte cookie[MAX_COOKIE_LEN];
3522 byte pendingMsgType;
3525 #ifndef ASN_NAME_MAX 3526 #define ASN_NAME_MAX 256 3530 #define MAX_DATE_SZ 32 3533 #define STACK_TYPE_X509 0 3534 #define STACK_TYPE_GEN_NAME 1 3535 #define STACK_TYPE_BIO 2 3536 #define STACK_TYPE_OBJ 3 3537 #define STACK_TYPE_STRING 4 3538 #define STACK_TYPE_CIPHER 5 3539 #define STACK_TYPE_ACCESS_DESCRIPTION 6 3540 #define STACK_TYPE_X509_EXT 7 3541 #define STACK_TYPE_NULL 8 3542 #define STACK_TYPE_X509_NAME 9 3543 #define STACK_TYPE_CONF_VALUE 10 3544 #define STACK_TYPE_X509_INFO 11 3549 #if defined(OPENSSL_ALL) 3550 wolf_sk_compare_cb comp;
3562 WOLFSSL_CONF_VALUE*
conf;
3576 char staticName[ASN_NAME_MAX];
3577 #if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ 3584 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) 3585 byte raw[ASN_NAME_MAX];
3590 #ifndef EXTERNAL_SERIAL_SIZE 3591 #define EXTERNAL_SERIAL_SIZE 32 3604 byte deviceType[EXTERNAL_SERIAL_SIZE];
3605 byte hwType[EXTERNAL_SERIAL_SIZE];
3607 byte hwSerialNum[EXTERNAL_SERIAL_SIZE];
3609 #if (defined(WOLFSSL_SEP) || defined(WOLFSSL_QT) || defined (OPENSSL_ALL)) && \ 3610 (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) 3612 byte certPolicyCrit;
3614 #if defined(WOLFSSL_QT) || defined(OPENSSL_ALL) 3618 #ifdef OPENSSL_EXTRA 3629 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) 3638 #ifdef WOLFSSL_CERT_EXT 3639 char certPolicies[MAX_CERTPOL_NB][MAX_CERTPOL_SZ];
3642 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL) 3643 wolfSSL_Mutex refMutex;
3646 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) 3648 WOLFSSL_CRYPTO_EX_DATA ex_data;
3652 byte* extKeyUsageSrc;
3653 const byte* CRLInfo;
3655 #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) 3656 byte* authInfoCaIssuer;
3657 int authInfoCaIssuerSz;
3665 word32 extKeyUsageSz;
3666 word32 extKeyUsageCount;
3671 byte authInfoCrit:1;
3673 byte keyUsageCrit:1;
3674 byte extKeyUsageCrit:1;
3675 byte subjKeyIdSet:1;
3677 byte subjKeyIdCrit:1;
3678 byte basicConstSet:1;
3679 byte basicConstCrit:1;
3680 byte basicConstPlSet:1;
3681 byte subjAltNameSet:1;
3682 byte subjAltNameCrit:1;
3683 byte authKeyIdSet:1;
3684 byte authKeyIdCrit:1;
3686 byte serial[EXTERNAL_SERIAL_SIZE];
3687 char subjectCN[ASN_NAME_MAX];
3688 #ifdef WOLFSSL_CERT_REQ 3689 char challengePw[CTC_NAME_SIZE];
3693 #if defined(OPENSSL_ALL) || defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_WPAS) 3715 byte sequence_number[8];
3743 NX_TCP_SOCKET* nxSocket;
3744 NX_PACKET* nxPacket;
3753 word16 got_hello_request:1;
3754 word16 got_client_hello:2;
3755 word16 got_server_hello:2;
3756 word16 got_hello_verify_request:1;
3757 word16 got_session_ticket:1;
3758 word16 got_end_of_early_data:1;
3759 word16 got_hello_retry_request:1;
3760 word16 got_encrypted_extensions:1;
3761 word16 got_certificate:1;
3762 word16 got_certificate_status:1;
3763 word16 got_server_key_exchange:1;
3764 word16 got_certificate_request:1;
3765 word16 got_server_hello_done:1;
3766 word16 got_certificate_verify:1;
3767 word16 got_client_key_exchange:1;
3768 word16 got_finished:1;
3769 word16 got_key_update:1;
3770 word16 got_change_cipher:1;
3781 #if !defined(NO_MD5) && !defined(NO_OLD_TLS) 3787 #ifdef WOLFSSL_SHA384 3790 #ifdef WOLFSSL_SHA512 3793 #if (defined(HAVE_ED25519) || defined(HAVE_ED448)) && \ 3794 !defined(WOLFSSL_NO_CLIENT_AUTH) 3802 #ifdef WOLFSSL_ASYNC_CRYPT 3803 #define MAX_ASYNC_ARGS 18 3804 typedef void (*FreeArgsCb)(
struct WOLFSSL* ssl,
void* pArgs);
3808 FreeArgsCb freeArgs;
3809 word32 args[MAX_ASYNC_ARGS];
3813 #ifdef HAVE_WRITE_DUP 3815 #define WRITE_DUP_SIDE 1 3816 #define READ_DUP_SIDE 2 3819 wolfSSL_Mutex dupMutex;
3824 WOLFSSL_LOCAL
void FreeWriteDup(
WOLFSSL* ssl);
3825 WOLFSSL_LOCAL
int NotifyWriteSide(
WOLFSSL* ssl,
int err);
3828 #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) 3838 #ifdef WOLFSSL_EARLY_DATA 3839 typedef enum EarlyDataState {
3842 expecting_early_data,
3853 #ifdef WOLFSSL_TLS13 3854 byte clientSecret[SECRET_LEN];
3855 byte serverSecret[SECRET_LEN];
3859 void* IOCB_WriteCtx;
3862 VerifyCallback verifyCallback;
3864 #ifdef HAVE_WRITE_DUP 3869 #ifdef OPENSSL_EXTRA 3872 CallbackIORecv CBIORecv;
3873 CallbackIOSend CBIOSend;
3874 #ifdef WOLFSSL_STATIC_MEMORY 3877 #ifndef NO_HANDSHAKE_DONE_CB 3878 HandShakeDoneCb hsDoneCb;
3881 #ifdef WOLFSSL_ASYNC_CRYPT 3883 #elif defined(WOLFSSL_NONBLOCK_OCSP) 3889 #ifndef WOLFSSL_AEAD_ONLY 3896 #ifdef HAVE_EXT_CACHE 3916 #ifdef OPENSSL_EXTRA 3917 CallbackInfoState* CBIS;
3922 byte sessionCtx[ID_LEN];
3925 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) 3926 unsigned long peerVerifyRet;
3928 #ifdef OPENSSL_EXTRA 3931 #ifdef HAVE_PK_CALLBACKS 3937 #ifdef WOLFSSL_RENESAS_TSIP_TLS 3938 byte *peerTsipEncRsaKeyIndex;
3940 byte peerRsaKeyPresent;
3949 byte peerQSHKeyPresent;
3952 byte user_set_QSHSchemes;
3954 #if defined(WOLFSSL_TLS13) || defined(HAVE_FFDHE) 3957 #ifdef WOLFSSL_TLS13 3958 word16 group[WOLFSSL_MAX_GROUP_COUNT];
3962 #ifdef WOLFSSL_TLS13 3963 #if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22) 3964 word16 certHashSigAlgoSz;
3965 byte certHashSigAlgo[WOLFSSL_MAX_SIGALGO];
3970 word16 peerNtruKeyLen;
3971 byte peerNtruKey[MAX_NTRU_PUB_KEY_SZ];
3972 byte peerNtruKeyPresent;
3974 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) 3977 #if defined(HAVE_ECC) || defined(HAVE_CURVE25519) || defined(HAVE_CURVE448) 3978 word32 ecdhCurveOID;
3980 byte eccTempKeyPresent;
3981 byte peerEccKeyPresent;
3986 word16 eccTempKeySz;
3987 byte peerEccDsaKeyPresent;
3989 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_CURVE448) 3994 byte peerEd25519KeyPresent;
3996 #ifdef HAVE_CURVE25519 3998 byte peerX25519KeyPresent;
4002 byte peerEd448KeyPresent;
4004 #ifdef HAVE_CURVE448 4005 curve448_key* peerX448Key;
4006 byte peerX448KeyPresent;
4014 int dtls_timeout_init;
4015 int dtls_timeout_max;
4017 word32 dtls_tx_msg_list_sz;
4018 word32 dtls_rx_msg_list_sz;
4022 void* IOCB_CookieCtx;
4023 word32 dtls_expected_rx;
4024 #ifdef WOLFSSL_SESSION_EXPORT 4025 wc_dtls_export dtls_export;
4027 #if defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU) 4030 #ifdef WOLFSSL_MULTICAST 4033 #ifdef WOLFSSL_DTLS_DROP_STATS 4034 word32 macDropCount;
4035 word32 replayDropCount;
4038 #ifdef WOLFSSL_CALLBACKS 4042 #ifdef OPENSSL_EXTRA 4043 SSL_Msg_Cb protoMsgCb;
4046 #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) 4051 CallbackFuzzer fuzzerCb;
4054 #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) 4057 #ifdef KEEP_PEER_CERT 4060 #ifdef KEEP_OUR_CERT 4066 #if defined(HAVE_EX_DATA) || defined(FORTRESS) 4067 WOLFSSL_CRYPTO_EX_DATA ex_data;
4070 #ifdef HAVE_ONE_TIME_AUTH 4073 #ifdef HAVE_TLS_EXTENSIONS 4075 #ifdef HAVE_MAX_FRAGMENT 4076 word16 max_fragment;
4078 #ifdef HAVE_TRUNCATED_HMAC 4079 byte truncated_hmac;
4081 #ifdef HAVE_CERTIFICATE_STATUS_REQUEST 4082 byte status_request;
4084 #ifdef HAVE_CERTIFICATE_STATUS_REQUEST_V2 4085 byte status_request_v2;
4087 #if defined(HAVE_SECURE_RENEGOTIATION) \ 4088 || defined(HAVE_SERVER_RENEGOTIATION_INFO) 4089 int secure_rene_count;
4093 char* alpn_client_list;
4094 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 4095 CallbackALPNSelect alpnSelect;
4096 void* alpnSelectArg;
4099 #if !defined(NO_WOLFSSL_CLIENT) && defined(HAVE_SESSION_TICKET) 4100 CallbackSessionTicket session_ticket_cb;
4101 void* session_ticket_ctx;
4102 byte expect_session_ticket;
4107 #ifdef OPENSSL_EXTRA 4110 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 4118 #if defined(WOLFSSL_APACHE_MYNEWT) && !defined(WOLFSSL_LWIP) 4124 #ifdef SESSION_INDEX 4128 void* MacEncryptCtx;
4129 void* DecryptVerifyCtx;
4130 #ifdef HAVE_ENCRYPT_THEN_MAC 4131 void* EncryptMacCtx;
4132 void* VerifyDecryptCtx;
4135 #ifdef HAVE_PK_CALLBACKS 4140 void* EccSharedSecretCtx;
4142 void* Ed25519SignCtx;
4143 void* Ed25519VerifyCtx;
4145 #ifdef HAVE_CURVE25519 4146 void* X25519KeyGenCtx;
4147 void* X25519SharedSecretCtx;
4151 void* Ed448VerifyCtx;
4153 #ifdef HAVE_CURVE448 4154 void* X448KeyGenCtx;
4155 void* X448SharedSecretCtx;
4165 void* RsaPssSignCtx;
4166 void* RsaPssVerifyCtx;
4172 #ifdef HAVE_SECRET_CALLBACK 4173 SessionSecretCb sessionSecretCb;
4174 void* sessionSecretCtx;
4175 #ifdef WOLFSSL_TLS13 4176 Tls13SecretCb tls13SecretCb;
4177 void* tls13SecretCtx;
4183 #ifdef WOLFSSL_EARLY_DATA 4184 EarlyDataState earlyData;
4188 long verifyCallbackResult;
4190 #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) 4197 WOLFSSL_LOCAL
int SSL_CTX_RefCount(
WOLFSSL_CTX* ctx,
int incr);
4200 WOLFSSL_LOCAL
void FreeSSL(
WOLFSSL*,
void* heap);
4201 WOLFSSL_API
void SSL_ResourceFree(
WOLFSSL*);
4206 WOLFSSL_LOCAL
int ProcessBuffer(
WOLFSSL_CTX* ctx,
const unsigned char* buff,
4207 long sz,
int format,
int type,
WOLFSSL* ssl,
4208 long* used,
int userChain,
int verify);
4209 WOLFSSL_LOCAL
int ProcessFile(
WOLFSSL_CTX* ctx,
const char* fname,
int format,
4210 int type,
WOLFSSL* ssl,
int userChain,
4213 #ifdef OPENSSL_EXTRA 4214 WOLFSSL_LOCAL
int CheckHostName(
DecodedCert* dCert,
char *domainName,
4215 size_t domainNameLen);
4220 #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) 4226 void AddPacketName(
WOLFSSL* ssl,
const char* name);
4233 void AddPacketInfo(
WOLFSSL* ssl,
const char* name,
int type,
4234 const byte* data,
int sz,
int write,
void* heap);
4245 change_cipher_spec = 20,
4248 application_data = 23
4263 byte message_seq[2];
4264 word24 fragment_offset;
4265 word24 fragment_length;
4269 enum HandShakeType {
4273 hello_verify_request = 3,
4275 end_of_early_data = 5,
4276 hello_retry_request = 6,
4277 encrypted_extensions = 8,
4279 server_key_exchange = 12,
4280 certificate_request = 13,
4281 server_hello_done = 14,
4282 certificate_verify = 15,
4283 client_key_exchange = 16,
4285 certificate_status = 22,
4287 change_cipher_hs = 55,
4294 enum ProvisionSide {
4295 PROVISION_CLIENT = 1,
4296 PROVISION_SERVER = 2,
4297 PROVISION_CLIENT_SERVER = 3
4301 static const byte
client[SIZEOF_SENDER] = { 0x43, 0x4C, 0x4E, 0x54 };
4302 static const byte
server[SIZEOF_SENDER] = { 0x53, 0x52, 0x56, 0x52 };
4304 static const byte tls_client[FINISHED_LABEL_SZ + 1] =
"client finished";
4305 static const byte tls_server[FINISHED_LABEL_SZ + 1] =
"server finished";
4307 #ifdef OPENSSL_EXTRA 4315 #define kNistCurves_MIN_NAME_LEN 5 4316 #define kNistCurves_MAX_NAME_LEN 7 4320 WOLFSSL_LOCAL
int SendChangeCipher(
WOLFSSL*);
4321 WOLFSSL_LOCAL
int SendTicket(
WOLFSSL*);
4322 WOLFSSL_LOCAL
int DoClientTicket(
WOLFSSL*,
const byte*, word32);
4323 WOLFSSL_LOCAL
int SendData(
WOLFSSL*,
const void*,
int);
4324 #ifdef WOLFSSL_TLS13 4325 #ifdef WOLFSSL_TLS13_DRAFT_18 4326 WOLFSSL_LOCAL
int SendTls13HelloRetryRequest(
WOLFSSL*);
4328 WOLFSSL_LOCAL
int SendTls13ServerHello(
WOLFSSL*, byte);
4331 WOLFSSL_LOCAL
int SendCertificate(
WOLFSSL*);
4332 WOLFSSL_LOCAL
int SendCertificateRequest(
WOLFSSL*);
4333 #if defined(HAVE_CERTIFICATE_STATUS_REQUEST) \ 4334 || defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2) 4337 #if defined(HAVE_SECURE_RENEGOTIATION) && \ 4338 defined(HAVE_SERVER_RENEGOTIATION_INFO) 4339 WOLFSSL_LOCAL
int SendHelloRequest(
WOLFSSL*);
4341 WOLFSSL_LOCAL
int SendCertificateStatus(
WOLFSSL*);
4342 WOLFSSL_LOCAL
int SendServerKeyExchange(
WOLFSSL*);
4343 WOLFSSL_LOCAL
int SendBuffered(
WOLFSSL*);
4344 WOLFSSL_LOCAL
int ReceiveData(
WOLFSSL*, byte*,
int,
int);
4345 WOLFSSL_LOCAL
int SendFinished(
WOLFSSL*);
4346 WOLFSSL_LOCAL
int SendAlert(
WOLFSSL*,
int,
int);
4347 WOLFSSL_LOCAL
int ProcessReply(
WOLFSSL*);
4349 WOLFSSL_LOCAL
int SetCipherSpecs(
WOLFSSL*);
4350 WOLFSSL_LOCAL
int MakeMasterSecret(
WOLFSSL*);
4352 WOLFSSL_LOCAL
int AddSession(
WOLFSSL*);
4353 WOLFSSL_LOCAL
int DeriveKeys(
WOLFSSL* ssl);
4354 WOLFSSL_LOCAL
int StoreKeys(
WOLFSSL* ssl,
const byte* keyData,
int side);
4356 WOLFSSL_LOCAL
int IsTLS(
const WOLFSSL* ssl);
4357 WOLFSSL_LOCAL
int IsAtLeastTLSv1_2(
const WOLFSSL* ssl);
4360 WOLFSSL_LOCAL
void FreeHandshakeResources(
WOLFSSL* ssl);
4361 WOLFSSL_LOCAL
void ShrinkInputBuffer(
WOLFSSL* ssl,
int forcedFree);
4362 WOLFSSL_LOCAL
void ShrinkOutputBuffer(
WOLFSSL* ssl);
4364 WOLFSSL_LOCAL
int VerifyClientSuite(
WOLFSSL* ssl);
4366 WOLFSSL_LOCAL
int SetTicket(
WOLFSSL*,
const byte*, word32);
4367 WOLFSSL_LOCAL
int wolfSSL_GetMaxRecordSize(
WOLFSSL* ssl,
int maxFragment);
4369 #if defined(OPENSSL_EXTRA) && defined(HAVE_ECC) 4380 WOLFSSL_LOCAL
int CheckRsaPssPadding(
const byte* plain, word32 plainSz,
4381 byte* out, word32 sigSz,
enum wc_HashType hashType);
4382 WOLFSSL_LOCAL
int ConvertHashPss(
int hashAlgo,
4383 enum wc_HashType* hashType,
int* mgf);
4385 WOLFSSL_LOCAL
int VerifyRsaSign(
WOLFSSL* ssl, byte* verifySig,
4386 word32 sigSz,
const byte* plain, word32 plainSz,
int sigAlgo,
4388 WOLFSSL_LOCAL
int RsaSign(
WOLFSSL* ssl,
const byte* in, word32 inSz,
4389 byte* out, word32* outSz,
int sigAlgo,
int hashAlgo,
RsaKey* key,
4391 WOLFSSL_LOCAL
int RsaVerify(
WOLFSSL* ssl, byte* in, word32 inSz,
4392 byte** out,
int sigAlgo,
int hashAlgo,
RsaKey* key,
4393 buffer* keyBufInfo);
4394 WOLFSSL_LOCAL
int RsaDec(
WOLFSSL* ssl, byte* in, word32 inSz, byte** out,
4396 WOLFSSL_LOCAL
int RsaEnc(
WOLFSSL* ssl,
const byte* in, word32 inSz, byte* out,
4397 word32* outSz,
RsaKey* key, buffer* keyBufInfo);
4401 WOLFSSL_LOCAL
int EccSign(
WOLFSSL* ssl,
const byte* in, word32 inSz,
4403 WOLFSSL_LOCAL
int EccVerify(
WOLFSSL* ssl,
const byte* in, word32 inSz,
4404 const byte* out, word32 outSz,
ecc_key* key, buffer* keyBufInfo);
4405 WOLFSSL_LOCAL
int EccSharedSecret(
WOLFSSL* ssl,
ecc_key* priv_key,
4406 ecc_key* pub_key, byte* pubKeyDer, word32* pubKeySz, byte* out,
4407 word32* outlen,
int side);
4410 WOLFSSL_LOCAL
int Ed25519CheckPubKey(
WOLFSSL* ssl);
4411 WOLFSSL_LOCAL
int Ed25519Sign(
WOLFSSL* ssl,
const byte* in, word32 inSz,
4413 WOLFSSL_LOCAL
int Ed25519Verify(
WOLFSSL* ssl,
const byte* in,
4414 word32 inSz,
const byte* msg, word32 msgSz,
ed25519_key* key,
4415 buffer* keyBufInfo);
4418 WOLFSSL_LOCAL
int Ed448CheckPubKey(
WOLFSSL* ssl);
4419 WOLFSSL_LOCAL
int Ed448Sign(
WOLFSSL* ssl,
const byte* in, word32 inSz,
4421 WOLFSSL_LOCAL
int Ed448Verify(
WOLFSSL* ssl,
const byte* in,
4422 word32 inSz,
const byte* msg, word32 msgSz,
ed448_key* key,
4423 buffer* keyBufInfo);
4427 #ifdef WOLFSSL_TRUST_PEER_CERT 4430 #define WC_MATCH_SKID 0 4431 #define WC_MATCH_NAME 1 4439 WOLFSSL_LOCAL
Signer* GetCA(
void* cm, byte* hash);
4441 WOLFSSL_LOCAL
Signer* GetCAByName(
void* cm, byte* hash);
4444 WOLFSSL_LOCAL
int BuildTlsHandshakeHash(
WOLFSSL* ssl, byte* hash,
4446 WOLFSSL_LOCAL
int BuildTlsFinished(
WOLFSSL* ssl,
Hashes* hashes,
4447 const byte* sender);
4448 WOLFSSL_LOCAL
void FreeArrays(
WOLFSSL* ssl,
int keep);
4449 WOLFSSL_LOCAL
int CheckAvailableSize(
WOLFSSL *ssl,
int size);
4450 WOLFSSL_LOCAL
int GrowInputBuffer(
WOLFSSL* ssl,
int size,
int usedLength);
4453 WOLFSSL_LOCAL
int MakeTlsMasterSecret(
WOLFSSL*);
4454 #ifndef WOLFSSL_AEAD_ONLY 4455 WOLFSSL_LOCAL
int TLS_hmac(
WOLFSSL* ssl, byte* digest,
const byte* in,
4456 word32 sz,
int padSz,
int content,
int verify);
4460 #ifndef NO_WOLFSSL_CLIENT 4461 WOLFSSL_LOCAL
int SendClientHello(
WOLFSSL*);
4462 #ifdef WOLFSSL_TLS13 4463 WOLFSSL_LOCAL
int SendTls13ClientHello(
WOLFSSL*);
4465 WOLFSSL_LOCAL
int SendClientKeyExchange(
WOLFSSL*);
4466 WOLFSSL_LOCAL
int SendCertificateVerify(
WOLFSSL*);
4469 #ifndef NO_WOLFSSL_SERVER 4470 WOLFSSL_LOCAL
int SendServerHello(
WOLFSSL*);
4471 WOLFSSL_LOCAL
int SendServerHelloDone(
WOLFSSL*);
4475 WOLFSSL_LOCAL
DtlsMsg* DtlsMsgNew(word32,
void*);
4476 WOLFSSL_LOCAL
void DtlsMsgDelete(
DtlsMsg*,
void*);
4477 WOLFSSL_LOCAL
void DtlsMsgListDelete(
DtlsMsg*,
void*);
4478 WOLFSSL_LOCAL
int DtlsMsgSet(
DtlsMsg*, word32,
const byte*, byte,
4479 word32, word32,
void*);
4481 WOLFSSL_LOCAL
void DtlsMsgStore(
WOLFSSL*, word32,
const byte*, word32,
4482 byte, word32, word32,
void*);
4485 WOLFSSL_LOCAL
int DtlsMsgPoolSave(
WOLFSSL*,
const byte*, word32);
4486 WOLFSSL_LOCAL
int DtlsMsgPoolTimeout(
WOLFSSL*);
4487 WOLFSSL_LOCAL
int VerifyForDtlsMsgPoolSend(
WOLFSSL*, byte, word32);
4488 WOLFSSL_LOCAL
void DtlsMsgPoolReset(
WOLFSSL*);
4489 WOLFSSL_LOCAL
int DtlsMsgPoolSend(
WOLFSSL*,
int);
4497 #if defined(WOLFSSL_TLS13) && (defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)) 4498 WOLFSSL_LOCAL word32 TimeNowInMilliseconds(
void);
4500 WOLFSSL_LOCAL word32 LowResTimer(
void);
4505 WOLFSSL_LOCAL
void InitX509(
WOLFSSL_X509*,
int,
void* heap);
4510 #ifndef MAX_CIPHER_NAME 4511 #define MAX_CIPHER_NAME 50 4514 #ifdef WOLFSSL_NAMES_STATIC 4515 typedef char cipher_name[MAX_CIPHER_NAME];
4517 typedef const char* cipher_name;
4522 #ifndef NO_ERROR_STRINGS 4523 cipher_name name_iana;
4527 #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) 4534 WOLFSSL_LOCAL
int GetCipherNamesSize(
void);
4535 WOLFSSL_LOCAL
const char* GetCipherNameInternal(
const byte cipherSuite0,
const byte cipherSuite);
4536 #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) 4538 #define MAX_SEGMENTS 5 4539 #define MAX_SEGMENT_SZ 20 4540 WOLFSSL_LOCAL
int wolfSSL_sk_CIPHER_description(
WOLFSSL_CIPHER*);
4541 WOLFSSL_LOCAL
const char* GetCipherProtocol(
const byte minor);
4542 WOLFSSL_LOCAL
const char* GetCipherKeaStr(
char n[][MAX_SEGMENT_SZ]);
4543 WOLFSSL_LOCAL
const char* GetCipherAuthStr(
char n[][MAX_SEGMENT_SZ]);
4544 WOLFSSL_LOCAL
const char* GetCipherEncStr(
char n[][MAX_SEGMENT_SZ]);
4545 WOLFSSL_LOCAL
const char* GetCipherMacStr(
char n[][MAX_SEGMENT_SZ]);
4546 WOLFSSL_LOCAL
int SetCipherBits(
const char* enc);
4548 WOLFSSL_LOCAL
const char* GetCipherNameIana(
const byte cipherSuite0,
const byte cipherSuite);
4549 WOLFSSL_LOCAL
const char* wolfSSL_get_cipher_name_internal(
WOLFSSL* ssl);
4550 WOLFSSL_LOCAL
const char* wolfSSL_get_cipher_name_iana(
WOLFSSL* ssl);
4551 WOLFSSL_LOCAL
int GetCipherSuiteFromName(
const char* name, byte* cipherSuite0,
4555 ENCRYPT_SIDE_ONLY = 1,
4557 ENCRYPT_AND_DECRYPT_SIDE
4560 WOLFSSL_LOCAL
int SetKeysSide(
WOLFSSL*,
enum encrypt_side);
4563 WOLFSSL_LOCAL
int SetDsaInternal(
WOLFSSL_DSA* dsa);
4564 WOLFSSL_LOCAL
int SetDsaExternal(
WOLFSSL_DSA* dsa);
4565 #ifndef HAVE_USER_RSA 4566 WOLFSSL_LOCAL
int SetRsaExternal(
WOLFSSL_RSA* rsa);
4567 WOLFSSL_LOCAL
int SetRsaInternal(
WOLFSSL_RSA* rsa);
4569 WOLFSSL_LOCAL
int SetDhInternal(
WOLFSSL_DH* dh);
4570 WOLFSSL_LOCAL
int SetDhExternal(
WOLFSSL_DH *dh);
4573 WOLFSSL_LOCAL
int DhGenKeyPair(
WOLFSSL* ssl,
DhKey* dhKey,
4574 byte* priv, word32* privSz,
4575 byte* pub, word32* pubSz);
4577 const byte* priv, word32 privSz,
4578 const byte* otherPub, word32 otherPubSz,
4579 byte* agree, word32* agreeSz);
4584 WOLFSSL_LOCAL word16 GetCurveByOID(
int oidSum);
4587 WOLFSSL_LOCAL
int InitHandshakeHashes(
WOLFSSL* ssl);
4588 WOLFSSL_LOCAL
void FreeHandshakeHashes(
WOLFSSL* ssl);
4590 WOLFSSL_LOCAL
int BuildMessage(
WOLFSSL* ssl, byte* output,
int outSz,
4591 const byte* input,
int inSz,
int type,
int hashOutput,
4592 int sizeOnly,
int asyncOkay);
4594 #ifdef WOLFSSL_TLS13 4595 int BuildTls13Message(
WOLFSSL* ssl, byte* output,
int outSz,
const byte* input,
4596 int inSz,
int type,
int hashOutput,
int sizeOnly,
int asyncOkay);
4599 WOLFSSL_LOCAL
int AllocKey(
WOLFSSL* ssl,
int type,
void** pKey);
4600 WOLFSSL_LOCAL
void FreeKey(
WOLFSSL* ssl,
int type,
void** pKey);
4602 #ifdef WOLFSSL_ASYNC_CRYPT 4603 WOLFSSL_LOCAL
int wolfSSL_AsyncInit(
WOLFSSL* ssl, WC_ASYNC_DEV* asyncDev, word32 flags);
4604 WOLFSSL_LOCAL
int wolfSSL_AsyncPop(
WOLFSSL* ssl, byte* state);
4605 WOLFSSL_LOCAL
int wolfSSL_AsyncPush(
WOLFSSL* ssl, WC_ASYNC_DEV* asyncDev);
Definition: internal.h:1913
Definition: poly1305.h:69
Definition: internal.h:2442
Definition: camellia.h:74
Definition: internal.h:2231
Definition: internal.h:3742
Definition: internal.h:2398
Definition: internal.h:2040
Definition: internal.h:1775
Definition: internal.h:1924
Definition: internal.h:4308
Header file containing key wolfSSL API.
Definition: internal.h:2483
Definition: internal.h:2052
Definition: internal.h:2358
Definition: internal.h:3494
Definition: internal.h:2009
Definition: internal.h:3546
Definition: internal.h:3752
Definition: internal.h:2518
Definition: internal.h:4253
Definition: internal.h:2595
Definition: internal.h:3060
Definition: internal.h:2449
Definition: callbacks.h:45
Definition: internal.h:2333
Definition: internal.h:1786
Definition: internal.h:1597
Definition: internal.h:3727
Definition: internal.h:3081
Definition: internal.h:1886
Definition: internal.h:3598
Definition: internal.h:2525
Definition: internal.h:3102
Definition: internal.h:3818
Definition: asn_public.h:178
Definition: wolfevent.h:83
Definition: internal.h:3003
Definition: internal.h:1857
Definition: internal.h:1833
Definition: internal.h:2421
Definition: internal.h:1958
Definition: internal.h:4520
Definition: internal.h:3572
Definition: internal.h:3831
Definition: internal.h:2045
Definition: internal.h:3806
Definition: internal.h:2909
Definition: callbacks.h:77
Definition: internal.h:3095
Definition: internal.h:3045
Definition: internal.h:2495
Definition: wolfcaam_sha.h:68
Definition: internal.h:1628
Definition: internal.h:3775
Definition: internal.h:2273
Definition: internal.h:3109
Definition: internal.h:3720
Definition: internal.h:4260
Definition: internal.h:3242
Definition: user_rsa.h:60
Definition: internal.h:2307
Definition: curve25519.h:70
Definition: asn_public.h:170
Definition: internal.h:3330
Definition: internal.h:3849
Definition: internal.h:2456
Definition: internal.h:2177
Definition: internal.h:2075
Definition: internal.h:2259
Definition: asn_public.h:213