- Timestamp:
- Feb 7, 2019, 8:36:33 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_rx/trunk/wolfssl-3.12.2/wolfssl/internal.h
r337 r372 70 70 #include <wolfssl/wolfcrypt/arc4.h> 71 71 #endif 72 #ifndef NO_SHA256 73 #include <wolfssl/wolfcrypt/sha256.h> 74 #endif 75 #ifdef HAVE_OCSP 76 #include <wolfssl/ocsp.h> 77 #endif 78 #ifdef WOLFSSL_SHA384 79 #include <wolfssl/wolfcrypt/sha512.h> 80 #endif 81 #ifdef WOLFSSL_SHA512 82 #include <wolfssl/wolfcrypt/sha512.h> 83 #endif 84 #ifdef HAVE_AESGCM 85 #include <wolfssl/wolfcrypt/sha512.h> 86 #endif 87 #ifdef WOLFSSL_RIPEMD 88 #include <wolfssl/wolfcrypt/ripemd.h> 89 #endif 90 #ifdef HAVE_IDEA 91 #include <wolfssl/wolfcrypt/idea.h> 92 #endif 93 #ifndef NO_RSA 94 #include <wolfssl/wolfcrypt/rsa.h> 95 #endif 72 96 #ifdef HAVE_ECC 73 97 #include <wolfssl/wolfcrypt/ecc.h> 74 98 #endif 99 #ifndef NO_DH 100 #include <wolfssl/wolfcrypt/dh.h> 101 #endif 75 102 #ifdef HAVE_ED25519 76 103 #include <wolfssl/wolfcrypt/ed25519.h> … … 79 106 #include <wolfssl/wolfcrypt/curve25519.h> 80 107 #endif 81 #ifndef NO_SHA256 82 #include <wolfssl/wolfcrypt/sha256.h> 83 #endif 84 #ifdef HAVE_OCSP 85 #include <wolfssl/ocsp.h> 86 #endif 87 #ifdef WOLFSSL_SHA512 88 #include <wolfssl/wolfcrypt/sha512.h> 89 #endif 90 #ifdef HAVE_AESGCM 91 #include <wolfssl/wolfcrypt/sha512.h> 92 #endif 93 #ifdef WOLFSSL_RIPEMD 94 #include <wolfssl/wolfcrypt/ripemd.h> 95 #endif 96 #ifdef HAVE_IDEA 97 #include <wolfssl/wolfcrypt/idea.h> 98 #endif 99 #ifndef NO_RSA 100 #include <wolfssl/wolfcrypt/rsa.h> 101 #endif 102 #ifdef HAVE_ECC 103 #include <wolfssl/wolfcrypt/ecc.h> 104 #endif 105 #ifndef NO_DH 106 #include <wolfssl/wolfcrypt/dh.h> 107 #endif 108 108 109 #include <wolfssl/wolfcrypt/wc_encrypt.h> 109 110 #include <wolfssl/wolfcrypt/hash.h> 110 111 112 #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) 113 #include <wolfssl/callbacks.h> 114 #endif 111 115 #ifdef WOLFSSL_CALLBACKS 112 #include <wolfssl/callbacks.h>113 116 #include <signal.h> 114 117 #endif … … 142 145 #elif defined(WOLFSSL_uTKERNEL2) 143 146 /* do nothing */ 147 #elif defined(WOLFSSL_CMSIS_RTOS) 148 #include "cmsis_os.h" 144 149 #elif defined(WOLFSSL_MDK_ARM) 145 150 #if defined(WOLFSSL_MDK5) … … 155 160 #elif defined(INTIME_RTOS) 156 161 #include <rt.h> 162 #elif defined(WOLFSSL_NUCLEUS_1_2) 163 /* do nothing */ 164 #elif defined(WOLFSSL_APACHE_MYNEWT) 165 #if !defined(WOLFSSL_LWIP) 166 void mynewt_ctx_clear(void *ctx); 167 void* mynewt_ctx_new(); 168 #endif 157 169 #else 158 170 #ifndef SINGLE_THREADED … … 160 172 #include <pthread.h> 161 173 #endif 162 #if defined(OPENSSL_EXTRA) || defined(GOAHEAD_WS)174 #ifdef OPENSSL_EXTRA 163 175 #include <unistd.h> /* for close of BIO */ 164 176 #endif … … 177 189 #ifdef WOLFSSL_ASYNC_CRYPT 178 190 #include <wolfssl/wolfcrypt/async.h> 191 #endif 192 193 #ifdef OPENSSL_EXTRA 194 #ifdef WOLFCRYPT_HAVE_SRP 195 #include <wolfssl/wolfcrypt/srp.h> 196 #endif 179 197 #endif 180 198 … … 232 250 #ifndef WOLFSSL_MAX_STRENGTH 233 251 252 #ifdef WOLFSSL_AEAD_ONLY 253 /* AES CBC ciphers are not allowed in AEAD only mode */ 254 #undef HAVE_AES_CBC 255 #endif 256 257 #ifndef WOLFSSL_AEAD_ONLY 234 258 #if !defined(NO_RSA) && !defined(NO_RC4) 235 259 #if defined(WOLFSSL_STATIC_RSA) … … 264 288 #endif 265 289 #endif 290 #endif /* !WOLFSSL_AEAD_ONLY */ 266 291 267 292 #if !defined(NO_RSA) && !defined(NO_AES) && !defined(NO_TLS) 268 #if !defined(NO_SHA) 293 #if !defined(NO_SHA) && defined(HAVE_AES_CBC) 269 294 #if defined(WOLFSSL_STATIC_RSA) 295 #ifdef WOLFSSL_AES_128 270 296 #define BUILD_TLS_RSA_WITH_AES_128_CBC_SHA 297 #endif 298 #ifdef WOLFSSL_AES_256 271 299 #define BUILD_TLS_RSA_WITH_AES_256_CBC_SHA 272 300 #endif 301 #endif 273 302 #if defined(HAVE_NTRU) && defined(WOLFSSL_STATIC_RSA) 303 #ifdef WOLFSSL_AES_128 274 304 #define BUILD_TLS_NTRU_RSA_WITH_AES_128_CBC_SHA 305 #endif 306 #ifdef WOLFSSL_AES_256 275 307 #define BUILD_TLS_NTRU_RSA_WITH_AES_256_CBC_SHA 276 308 #endif 277 309 #endif 310 #endif 278 311 #if defined(WOLFSSL_STATIC_RSA) 279 #if !defined (NO_SHA256) 312 #if !defined (NO_SHA256) && defined(HAVE_AES_CBC) 313 #ifdef WOLFSSL_AES_128 280 314 #define BUILD_TLS_RSA_WITH_AES_128_CBC_SHA256 315 #endif 316 #ifdef WOLFSSL_AES_256 281 317 #define BUILD_TLS_RSA_WITH_AES_256_CBC_SHA256 282 318 #endif 319 #endif 283 320 #if defined (HAVE_AESGCM) 321 #ifdef WOLFSSL_AES_128 284 322 #define BUILD_TLS_RSA_WITH_AES_128_GCM_SHA256 285 #if defined (WOLFSSL_SHA384) 323 #endif 324 #if defined (WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 286 325 #define BUILD_TLS_RSA_WITH_AES_256_GCM_SHA384 287 326 #endif 288 327 #endif 289 328 #if defined (HAVE_AESCCM) 329 #ifdef WOLFSSL_AES_128 290 330 #define BUILD_TLS_RSA_WITH_AES_128_CCM_8 331 #endif 332 #ifdef WOLFSSL_AES_256 291 333 #define BUILD_TLS_RSA_WITH_AES_256_CCM_8 292 334 #endif 293 #if defined(HAVE_BLAKE2) 335 #endif 336 #if defined(HAVE_BLAKE2) && defined(HAVE_AES_CBC) 337 #ifdef WOLFSSL_AES_128 294 338 #define BUILD_TLS_RSA_WITH_AES_128_CBC_B2B256 339 #endif 340 #ifdef WOLFSSL_AES_256 295 341 #define BUILD_TLS_RSA_WITH_AES_256_CBC_B2B256 296 342 #endif 297 343 #endif 298 344 #endif 299 300 #if defined(HAVE_CAMELLIA) && !defined(NO_TLS) 345 #endif 346 347 #if defined(HAVE_CAMELLIA) && !defined(NO_TLS) && !defined(NO_CAMELLIA_CBC) 301 348 #ifndef NO_RSA 302 349 #if defined(WOLFSSL_STATIC_RSA) … … 326 373 #if !defined(NO_PSK) && !defined(NO_AES) && !defined(NO_TLS) 327 374 #if !defined(NO_SHA) 375 #ifdef WOLFSSL_AES_128 328 376 #define BUILD_TLS_PSK_WITH_AES_128_CBC_SHA 377 #endif 378 #ifdef WOLFSSL_AES_256 329 379 #define BUILD_TLS_PSK_WITH_AES_256_CBC_SHA 330 380 #endif 381 #endif 331 382 #ifndef NO_SHA256 383 #ifdef WOLFSSL_AES_128 384 #ifdef HAVE_AES_CBC 332 385 #define BUILD_TLS_PSK_WITH_AES_128_CBC_SHA256 386 #endif 333 387 #ifdef HAVE_AESGCM 334 388 #define BUILD_TLS_PSK_WITH_AES_128_GCM_SHA256 335 389 #endif 390 #endif /* WOLFSSL_AES_128 */ 336 391 #ifdef HAVE_AESCCM 392 #ifdef WOLFSSL_AES_128 337 393 #define BUILD_TLS_PSK_WITH_AES_128_CCM_8 338 #define BUILD_TLS_PSK_WITH_AES_256_CCM_8339 394 #define BUILD_TLS_PSK_WITH_AES_128_CCM 395 #endif 396 #ifdef WOLFSSL_AES_256 397 #define BUILD_TLS_PSK_WITH_AES_256_CCM_8 340 398 #define BUILD_TLS_PSK_WITH_AES_256_CCM 341 399 #endif 342 400 #endif 343 #ifdef WOLFSSL_SHA384 401 #endif 402 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 403 #ifdef HAVE_AES_CBC 344 404 #define BUILD_TLS_PSK_WITH_AES_256_CBC_SHA384 405 #endif 345 406 #ifdef HAVE_AESGCM 346 407 #define BUILD_TLS_PSK_WITH_AES_256_GCM_SHA384 … … 398 459 399 460 #if !defined(NO_SHA) 461 #if defined(WOLFSSL_AES_128) && defined(HAVE_AES_CBC) 400 462 #define BUILD_TLS_DHE_RSA_WITH_AES_128_CBC_SHA 463 #endif 464 #if defined(WOLFSSL_AES_256) && defined(HAVE_AES_CBC) 401 465 #define BUILD_TLS_DHE_RSA_WITH_AES_256_CBC_SHA 466 #endif 402 467 #if !defined(NO_DES3) 403 468 #define BUILD_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 404 469 #endif 405 470 #endif 406 #if !defined(NO_SHA256) 471 #if !defined(NO_SHA256) && defined(HAVE_AES_CBC) 472 #ifdef WOLFSSL_AES_128 407 473 #define BUILD_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 474 #endif 475 #ifdef WOLFSSL_AES_256 408 476 #define BUILD_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 409 477 #endif 410 478 #endif 479 #endif 411 480 412 481 #if defined(HAVE_ANON) && !defined(NO_TLS) && !defined(NO_DH) && \ 413 !defined(NO_AES) && !defined(NO_SHA) 482 !defined(NO_AES) && !defined(NO_SHA) && defined(WOLFSSL_AES_128) 483 #ifdef HAVE_AES_CBC 414 484 #define BUILD_TLS_DH_anon_WITH_AES_128_CBC_SHA 485 #endif 486 487 #if defined(WOLFSSL_SHA384) && defined(HAVE_AESGCM) 488 #define BUILD_TLS_DH_anon_WITH_AES_256_GCM_SHA384 489 #endif 415 490 #endif 416 491 417 492 #if !defined(NO_DH) && !defined(NO_PSK) && !defined(NO_TLS) 418 493 #ifndef NO_SHA256 419 #ifndef NO_AES 494 #if !defined(NO_AES) && defined(WOLFSSL_AES_128) && \ 495 defined(HAVE_AES_CBC) 420 496 #define BUILD_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 421 497 #endif … … 425 501 #endif 426 502 #ifdef WOLFSSL_SHA384 427 #ifndef NO_AES 503 #if !defined(NO_AES) && defined(WOLFSSL_AES_256) && \ 504 defined(HAVE_AES_CBC) 428 505 #define BUILD_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 429 506 #endif … … 434 511 #endif 435 512 436 #if defined(HAVE_ECC) && !defined(NO_TLS)513 #if (defined(HAVE_ECC) || defined(HAVE_CURVE25519)) && !defined(NO_TLS) 437 514 #if !defined(NO_AES) 438 #if !defined(NO_SHA) 515 #if !defined(NO_SHA) && defined(HAVE_AES_CBC) 439 516 #if !defined(NO_RSA) 517 #ifdef WOLFSSL_AES_128 440 518 #define BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 519 #endif 520 #ifdef WOLFSSL_AES_256 441 521 #define BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 442 #if defined(WOLFSSL_STATIC_DH) 522 #endif 523 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 524 #ifdef WOLFSSL_AES_128 443 525 #define BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 526 #endif 527 #ifdef WOLFSSL_AES_256 444 528 #define BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 445 529 #endif 446 530 #endif 447 531 #endif 532 533 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 534 defined(HAVE_ED25519)) 535 #ifdef WOLFSSL_AES_128 448 536 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 537 #endif 538 #ifdef WOLFSSL_AES_256 449 539 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 450 451 #if defined(WOLFSSL_STATIC_DH) 540 #endif 541 #endif 542 543 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 544 #ifdef WOLFSSL_AES_128 452 545 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 546 #endif 547 #ifdef WOLFSSL_AES_256 453 548 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 454 549 #endif 550 #endif 455 551 #endif /* NO_SHA */ 456 #ifndef NO_SHA256 552 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) && \ 553 defined(HAVE_AES_CBC) 457 554 #if !defined(NO_RSA) 458 555 #define BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 459 #if defined(WOLFSSL_STATIC_DH) 556 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 460 557 #define BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 461 558 #endif 462 559 #endif 560 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 561 defined(HAVE_ED25519)) 463 562 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 464 #if defined(WOLFSSL_STATIC_DH) 563 #endif 564 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 465 565 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 466 566 #endif 467 567 #endif 468 568 469 #ifdef WOLFSSL_SHA384 569 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) && \ 570 defined(HAVE_AES_CBC) 470 571 #if !defined(NO_RSA) 471 572 #define BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 472 #if defined(WOLFSSL_STATIC_DH) 573 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 473 574 #define BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 474 575 #endif 475 576 #endif 577 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 578 defined(HAVE_ED25519)) 476 579 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 477 #if defined(WOLFSSL_STATIC_DH) 580 #endif 581 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 478 582 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 479 583 #endif … … 482 586 #if defined (HAVE_AESGCM) 483 587 #if !defined(NO_RSA) 484 #if defined(WOLFSSL_STATIC_DH) 588 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 589 #ifdef WOLFSSL_AES_128 485 590 #define BUILD_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 486 591 #endif 592 #endif 487 593 #if defined(WOLFSSL_SHA384) 488 #if defined(WOLFSSL_STATIC_DH) 594 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 595 #ifdef WOLFSSL_AES_256 489 596 #define BUILD_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 490 597 #endif 491 598 #endif 492 599 #endif 493 494 #if defined(WOLFSSL_STATIC_DH) 600 #endif 601 602 #if defined(WOLFSSL_STATIC_DH) && defined(WOLFSSL_AES_128) && \ 603 defined(HAVE_ECC) 495 604 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 496 605 #endif 497 606 498 607 #if defined(WOLFSSL_SHA384) 499 #if defined(WOLFSSL_STATIC_DH) 608 #if defined(WOLFSSL_STATIC_DH) && \ 609 defined(WOLFSSL_AES_256) && defined(HAVE_ECC) 500 610 #define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 501 611 #endif … … 507 617 #if !defined(NO_RSA) 508 618 #define BUILD_TLS_ECDHE_RSA_WITH_RC4_128_SHA 509 #if defined(WOLFSSL_STATIC_DH) 619 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 510 620 #define BUILD_TLS_ECDH_RSA_WITH_RC4_128_SHA 511 621 #endif 512 622 #endif 513 623 624 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 625 defined(HAVE_ED25519)) 514 626 #define BUILD_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 515 #if defined(WOLFSSL_STATIC_DH) 627 #endif 628 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 516 629 #define BUILD_TLS_ECDH_ECDSA_WITH_RC4_128_SHA 517 630 #endif … … 522 635 #if !defined(NO_RSA) 523 636 #define BUILD_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 524 #if defined(WOLFSSL_STATIC_DH) 637 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 525 638 #define BUILD_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 526 639 #endif 527 640 #endif 528 641 642 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 643 defined(HAVE_ED25519)) 529 644 #define BUILD_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 530 #if defined(WOLFSSL_STATIC_DH) 645 #endif 646 #if defined(WOLFSSL_STATIC_DH) && defined(HAVE_ECC) 531 647 #define BUILD_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 532 648 #endif … … 535 651 #if defined(HAVE_NULL_CIPHER) 536 652 #if !defined(NO_SHA) 653 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 654 defined(HAVE_ED25519)) 537 655 #define BUILD_TLS_ECDHE_ECDSA_WITH_NULL_SHA 656 #endif 538 657 #endif 539 658 #if !defined(NO_PSK) && !defined(NO_SHA256) … … 541 660 #endif 542 661 #endif 543 #if !defined(NO_PSK) && !defined(NO_SHA256) && !defined(NO_AES) 662 #if !defined(NO_PSK) && !defined(NO_SHA256) && !defined(NO_AES) && \ 663 defined(WOLFSSL_AES_128) && defined(HAVE_AES_CBC) 544 664 #define BUILD_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 545 665 #endif … … 547 667 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) && !defined(NO_SHA256) 548 668 #if !defined(NO_OLD_POLY1305) 549 #ifdef HAVE_ECC 669 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 670 defined(HAVE_ED25519)) 550 671 #define BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_OLD_POLY1305_SHA256 551 # ifndef NO_RSA552 #define BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256553 # endif672 #endif 673 #if !defined(NO_RSA) && defined(HAVE_ECC) 674 #define BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256 554 675 #endif 555 676 #if !defined(NO_DH) && !defined(NO_RSA) … … 559 680 #if !defined(NO_PSK) 560 681 #define BUILD_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 561 #if def HAVE_ECC682 #if defined(HAVE_ECC) || defined(HAVE_ED25519) 562 683 #define BUILD_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 563 684 #endif … … 573 694 !defined(NO_RSA) && defined(HAVE_AESGCM) 574 695 575 #if ndef NO_SHA256696 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) 576 697 #define BUILD_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 577 698 #endif 578 699 579 #if def WOLFSSL_SHA384700 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 580 701 #define BUILD_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 581 702 #endif … … 584 705 #if !defined(NO_DH) && !defined(NO_PSK) && !defined(NO_TLS) 585 706 #ifndef NO_SHA256 586 #if def HAVE_AESGCM707 #if defined(HAVE_AESGCM) && defined(WOLFSSL_AES_128) 587 708 #define BUILD_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 588 709 #endif 589 710 #ifdef HAVE_AESCCM 711 #ifdef WOLFSSL_AES_128 590 712 #define BUILD_TLS_DHE_PSK_WITH_AES_128_CCM 713 #endif 714 #ifdef WOLFSSL_AES_256 591 715 #define BUILD_TLS_DHE_PSK_WITH_AES_256_CCM 592 716 #endif 593 717 #endif 594 #if defined(WOLFSSL_SHA384) && defined(HAVE_AESGCM) 718 #endif 719 #if defined(WOLFSSL_SHA384) && defined(HAVE_AESGCM) && \ 720 defined(WOLFSSL_AES_256) 595 721 #define BUILD_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 596 722 #endif 597 723 #endif 598 724 599 #if defined(HAVE_ECC) && !defined(NO_TLS) && !defined(NO_AES) 725 #if (defined(HAVE_ECC) || defined(HAVE_CURVE25519)) && !defined(NO_TLS) && \ 726 !defined(NO_AES) 600 727 #ifdef HAVE_AESGCM 601 #ifndef NO_SHA256 728 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) 729 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 730 defined(HAVE_ED25519)) 602 731 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 732 #endif 603 733 #ifndef NO_RSA 604 734 #define BUILD_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 605 735 #endif 606 736 #endif 607 #ifdef WOLFSSL_SHA384 737 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 738 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 739 defined(HAVE_ED25519)) 608 740 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 741 #endif 609 742 #ifndef NO_RSA 610 743 #define BUILD_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 … … 613 746 #endif 614 747 #if defined(HAVE_AESCCM) && !defined(NO_SHA256) 748 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 749 defined(HAVE_ED25519)) 750 #ifdef WOLFSSL_AES_128 615 751 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CCM 616 752 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 753 #endif 754 #ifdef WOLFSSL_AES_256 617 755 #define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 618 756 #endif 619 757 #endif 758 #endif 759 #endif 620 760 621 761 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) && !defined(NO_SHA256) 622 #ifdef HAVE_ECC 762 #if defined(HAVE_ECC) || defined(HAVE_CURVE25519) 763 #if defined(HAVE_ECC) || (defined(HAVE_CURVE25519) && \ 764 defined(HAVE_ED25519)) 623 765 #define BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 766 #endif 624 767 #ifndef NO_RSA 625 768 #define BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 … … 633 776 #if defined(WOLFSSL_TLS13) 634 777 #ifdef HAVE_AESGCM 635 #if ndef NO_SHA256778 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) 636 779 #define BUILD_TLS_AES_128_GCM_SHA256 637 780 #endif 638 #if def WOLFSSL_SHA384781 #if defined(WOLFSSL_SHA384) && defined(WOLFSSL_AES_256) 639 782 #define BUILD_TLS_AES_256_GCM_SHA384 640 783 #endif 641 784 #endif 642 785 643 #if def HAVE_CHACHA786 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) 644 787 #ifndef NO_SHA256 645 788 #define BUILD_TLS_CHACHA20_POLY1305_SHA256 … … 648 791 649 792 #ifdef HAVE_AESCCM 650 #if ndef NO_SHA256793 #if !defined(NO_SHA256) && defined(WOLFSSL_AES_128) 651 794 #define BUILD_TLS_AES_128_CCM_SHA256 652 795 #define BUILD_TLS_AES_128_CCM_8_SHA256 … … 689 832 defined(BUILD_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384) 690 833 #define BUILD_AESGCM 834 #else 835 /* No AES-GCM cipher suites available with build */ 836 #define NO_AESGCM_AEAD 837 #endif 838 839 #if defined(BUILD_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256) || \ 840 defined(BUILD_TLS_DHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256) || \ 841 defined(BUILD_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256) || \ 842 defined(BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256) || \ 843 defined(BUILD_TLS_ECDHE_ECDSA_WITH_CHACHA20_OLD_POLY1305_SHA256) || \ 844 defined(BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256) || \ 845 defined(BUILD_TLS_ECDHE_RSA_WITH_CHACHA20_OLD_POLY1305_SHA256) || \ 846 defined(BUILD_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256) || \ 847 defined(BUILD_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256) || \ 848 defined(BUILD_TLS_CHACHA20_POLY1305_SHA256) 849 /* Have an available ChaCha Poly cipher suite */ 850 #else 851 /* No ChaCha Poly cipher suites available with build */ 852 #define NO_CHAPOL_AEAD 691 853 #endif 692 854 … … 726 888 727 889 #if defined(WOLFSSL_MAX_STRENGTH) || \ 728 defined(HAVE_AESGCM) || defined(HAVE_AESCCM) || \ 729 (defined(HAVE_CHACHA) && defined(HAVE_POLY1305)) 890 (defined(HAVE_AESGCM) && !defined(NO_AESGCM_AEAD)) || \ 891 defined(HAVE_AESCCM) || \ 892 (defined(HAVE_CHACHA) && defined(HAVE_POLY1305) && !defined(NO_CHAPOL_AEAD)) 730 893 731 894 #define HAVE_AEAD … … 833 996 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x9e, 834 997 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x9f, 998 TLS_DH_anon_WITH_AES_256_GCM_SHA384 = 0xa7, 835 999 TLS_PSK_WITH_AES_128_GCM_SHA256 = 0xa8, 836 1000 TLS_PSK_WITH_AES_256_GCM_SHA384 = 0xa9, … … 927 1091 928 1092 1093 /* set minimum DH key size allowed */ 1094 #ifndef WOLFSSL_MIN_DHKEY_BITS 1095 #ifdef WOLFSSL_MAX_STRENGTH 1096 #define WOLFSSL_MIN_DHKEY_BITS 2048 1097 #else 1098 #define WOLFSSL_MIN_DHKEY_BITS 1024 1099 #endif 1100 #endif 1101 #if (WOLFSSL_MIN_DHKEY_BITS % 8) 1102 #error DH minimum bit size must be multiple of 8 1103 #endif 1104 #if (WOLFSSL_MIN_DHKEY_BITS > 16000) 1105 #error DH minimum bit size must not be greater than 16000 1106 #endif 1107 #define MIN_DHKEY_SZ (WOLFSSL_MIN_DHKEY_BITS / 8) 1108 /* set maximum DH key size allowed */ 1109 #ifndef WOLFSSL_MAX_DHKEY_BITS 1110 #define WOLFSSL_MAX_DHKEY_BITS 4096 1111 #endif 1112 #if (WOLFSSL_MAX_DHKEY_BITS % 8) 1113 #error DH maximum bit size must be multiple of 8 1114 #endif 1115 #if (WOLFSSL_MAX_DHKEY_BITS > 16000) 1116 #error DH maximum bit size must not be greater than 16000 1117 #endif 1118 #define MAX_DHKEY_SZ (WOLFSSL_MAX_DHKEY_BITS / 8) 1119 1120 929 1121 930 1122 enum Misc { 1123 CIPHER_BYTE = 0x00, /* Default ciphers */ 931 1124 ECC_BYTE = 0xC0, /* ECC first cipher suite byte */ 932 1125 QSH_BYTE = 0xD0, /* Quantum-safe Handshake cipher suite */ … … 946 1139 TLSv1_2_MINOR = 3, /* TLSv1_2 minor version number */ 947 1140 TLSv1_3_MINOR = 4, /* TLSv1_3 minor version number */ 1141 #ifdef WOLFSSL_TLS13_DRAFT 948 1142 TLS_DRAFT_MAJOR = 0x7f, /* Draft TLS major version number */ 949 1143 #ifdef WOLFSSL_TLS13_DRAFT_18 950 1144 TLS_DRAFT_MINOR = 0x12, /* Minor version number of TLS draft */ 1145 #elif defined(WOLFSSL_TLS13_DRAFT_22) 1146 TLS_DRAFT_MINOR = 0x16, /* Minor version number of TLS draft */ 1147 #elif defined(WOLFSSL_TLS13_DRAFT_23) 1148 TLS_DRAFT_MINOR = 0x17, /* Minor version number of TLS draft */ 1149 #elif defined(WOLFSSL_TLS13_DRAFT_26) 1150 TLS_DRAFT_MINOR = 0x1a, /* Minor version number of TLS draft */ 951 1151 #else 952 TLS_DRAFT_MINOR = 0x14, /* Minor version number of TLS draft */ 1152 TLS_DRAFT_MINOR = 0x1c, /* Minor version number of TLS draft */ 1153 #endif 953 1154 #endif 954 1155 OLD_HELLO_ID = 0x01, /* SSLv2 Client Hello Indicator */ … … 968 1169 FINISHED_SZ = 36, /* WC_MD5_DIGEST_SIZE + WC_SHA_DIGEST_SIZE */ 969 1170 MAX_RECORD_SIZE = 16384, /* 2^14, max size by standard */ 970 MAX_MSG_EXTRA = 38 + MAX_DIGEST_SIZE,1171 MAX_MSG_EXTRA = 38 + WC_MAX_DIGEST_SIZE, 971 1172 /* max added to msg, mac + pad from */ 972 1173 /* RECORD_HEADER_SZ + BLOCK_SZ (pad) + Max … … 975 1176 MAX_MTU = WOLFSSL_MAX_MTU, /* max expected MTU */ 976 1177 MAX_UDP_SIZE = 8192 - 100, /* was MAX_MTU - 100 */ 977 MAX_DH_SZ = 1036, /* 4096 p, pub, g + 2 byte size for each */ 1178 MAX_DH_SZ = (MAX_DHKEY_SZ * 3) + 12, /* DH_P, DH_G and DH_Pub */ 1179 /* 4096 p, pub, g + 2 byte size for each */ 978 1180 MAX_STR_VERSION = 8, /* string rep of protocol version */ 979 1181 … … 981 1183 PAD_SHA = 40, /* pad length for finished */ 982 1184 MAX_PAD_SIZE = 256, /* maximum length of padding */ 983 COMPRESS_DUMMY_SIZE = 64, /* compression dummy round size */ 984 COMPRESS_CONSTANT = 13, /* compression calc constant */ 985 COMPRESS_UPPER = 55, /* compression calc numerator */ 986 COMPRESS_LOWER = 64, /* compression calc denominator */ 987 988 PEM_LINE_LEN = 80, /* PEM line max + fudge */ 1185 989 1186 LENGTH_SZ = 2, /* length field for HMAC, data only */ 990 1187 VERSION_SZ = 2, /* length of proctocol version */ … … 994 1191 EXTS_SZ = 2, /* always use 2 bytes */ 995 1192 EXT_ID_SZ = 2, /* always use 2 bytes */ 996 MAX_DH_SIZE = 513, /* 4096 bit plus possible leading 0 */ 1193 MAX_DH_SIZE = MAX_DHKEY_SZ+1, 1194 /* Max size plus possible leading 0 */ 997 1195 NAMED_DH_MASK = 0x100, /* Named group mask for DH parameters */ 998 1196 SESSION_HINT_SZ = 4, /* session timeout hint */ 999 1197 SESSION_ADD_SZ = 4, /* session age add */ 1198 TICKET_NONCE_LEN_SZ = 1, /* Ticket nonce length size */ 1199 DEF_TICKET_NONCE_SZ = 1, /* Default ticket nonce size */ 1200 MAX_TICKET_NONCE_SZ = 8, /* maximum ticket nonce size */ 1000 1201 MAX_LIFETIME = 604800, /* maximum ticket lifetime */ 1001 1202 MAX_EARLY_DATA_SZ = 4096, /* maximum early data size */ … … 1029 1230 HELLO_EXT_SZ_SZ = 2, /* length of a hello extension size */ 1030 1231 HELLO_EXT_SIGALGO_SZ = 2, /* length of number of items in sigalgo list */ 1031 HELLO_EXT_SIGALGO_MAX = 32, /* number of items in the signature algo list */1032 1232 1033 1233 DTLS_HANDSHAKE_HEADER_SZ = 12, /* normal + seq(2) + offset(3) + length(3) */ … … 1040 1240 DTLS_EXPORT_PRO = 165,/* wolfSSL protocol for serialized session */ 1041 1241 DTLS_EXPORT_VERSION = 4, /* wolfSSL version for serialized session */ 1042 DTLS_EXPORT_OPT_SZ = 58, /* amount of bytes used from Options */1242 DTLS_EXPORT_OPT_SZ = 60, /* amount of bytes used from Options */ 1043 1243 DTLS_EXPORT_VERSION_3 = 3, /* wolfSSL version before TLS 1.3 addition */ 1044 DTLS_EXPORT_OPT_SZ_3 = 5 7, /* amount of bytes used from Options */1244 DTLS_EXPORT_OPT_SZ_3 = 59, /* amount of bytes used from Options */ 1045 1245 DTLS_EXPORT_KEY_SZ = 325 + (DTLS_SEQ_SZ * 2), 1046 1246 /* max amount of bytes used from Keys */ … … 1063 1263 MAX_HKDF_LABEL_SZ = OPAQUE16_LEN + 1064 1264 OPAQUE8_LEN + PROTOCOL_LABEL_SZ + MAX_LABEL_SZ + 1065 OPAQUE8_LEN + MAX_DIGEST_SIZE,1265 OPAQUE8_LEN + WC_MAX_DIGEST_SIZE, 1066 1266 MAX_REQUEST_SZ = 256, /* Maximum cert req len (no auth yet */ 1067 1267 SESSION_FLUSH_COUNT = 256, /* Flush session cache unless user turns off */ 1068 1069 RC4_KEY_SIZE = 16, /* always 128bit */ 1070 DES_KEY_SIZE = 8, /* des */ 1071 DES3_KEY_SIZE = 24, /* 3 des ede */ 1072 DES_IV_SIZE = DES_BLOCK_SIZE, 1073 AES_256_KEY_SIZE = 32, /* for 256 bit */ 1074 AES_192_KEY_SIZE = 24, /* for 192 bit */ 1075 AES_IV_SIZE = 16, /* always block size */ 1076 AES_128_KEY_SIZE = 16, /* for 128 bit */ 1268 TLS_MAX_PAD_SZ = 255, /* Max padding in TLS */ 1269 1270 #if defined(HAVE_FIPS) && \ 1271 (!defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION < 2)) 1272 MAX_SYM_KEY_SIZE = AES_256_KEY_SIZE, 1273 #else 1274 MAX_SYM_KEY_SIZE = WC_MAX_SYM_KEY_SIZE, 1275 #endif 1276 1277 #ifdef HAVE_SELFTEST 1278 #define WOLFSSL_AES_KEY_SIZE_ENUM 1279 AES_IV_SIZE = 16, 1280 AES_128_KEY_SIZE = 16, 1281 AES_192_KEY_SIZE = 24, 1282 AES_256_KEY_SIZE = 32, 1283 #endif 1284 1285 MAX_IV_SZ = AES_BLOCK_SIZE, 1077 1286 1078 1287 AEAD_SEQ_OFFSET = 4, /* Auth Data: Sequence number */ … … 1117 1326 EVP_SALT_SIZE = 8, /* evp salt size 64 bits */ 1118 1327 1328 #ifndef ECDHE_SIZE /* allow this to be overriden at compile-time */ 1119 1329 ECDHE_SIZE = 32, /* ECHDE server size defaults to 256 bit */ 1330 #endif 1120 1331 MAX_EXPORT_ECC_SZ = 256, /* Export ANS X9.62 max future size */ 1121 1332 MAX_CURVE_NAME_SZ = 16, /* Maximum size of curve name string */ … … 1130 1341 MIN_RSA_SHA384_PSS_BITS = 384 * 2 + 8 * 8, /* Min key size */ 1131 1342 1132 #ifdef HAVE_QSH 1133 /* qsh handshake sends 600+ size keys over hello extensions */ 1134 MAX_HELLO_SZ = 2048, /* max client or server hello */ 1343 #ifndef NO_RSA 1344 MAX_CERT_VERIFY_SZ = 4096 / 8, /* max RSA - default 4096-bits */ 1345 #elif defined(HAVE_ECC) 1346 MAX_CERT_VERIFY_SZ = ECC_MAX_SIG_SIZE, /* max ECC */ 1347 #elif defined(HAVE_ED25519) 1348 MAX_CERT_VERIFY_SZ = ED25519_SIG_SIZE, /* max Ed25519 */ 1135 1349 #else 1136 MAX_HELLO_SZ = 128, /* max client or server hello */ 1137 #endif 1138 MAX_CERT_VERIFY_SZ = 1024, /* max */ 1350 MAX_CERT_VERIFY_SZ = 1024, /* max default */ 1351 #endif 1139 1352 CLIENT_HELLO_FIRST = 35, /* Protocol + RAN_LEN + sizeof(id_len) */ 1140 1353 MAX_SUITE_NAME = 48, /* maximum length of cipher suite string */ … … 1159 1372 MAX_X509_SIZE = 2048, /* max static x509 buffer size */ 1160 1373 CERT_MIN_SIZE = 256, /* min PEM cert size with header/footer */ 1161 FILE_BUFFER_SIZE = 1024, /* default static file buffer size for input,1162 will use dynamic buffer if not big enough */1163 1374 1164 1375 MAX_NTRU_PUB_KEY_SZ = 1027, /* NTRU max for now */ … … 1177 1388 PREV_ORDER = -1, /* Sequence number is in previous epoch. */ 1178 1389 PEER_ORDER = 1, /* Peer sequence number for verify. */ 1179 CUR_ORDER = 0 /* Current sequence number. */ 1180 }; 1181 1390 CUR_ORDER = 0, /* Current sequence number. */ 1391 WRITE_PROTO = 1, /* writing a protocol message */ 1392 READ_PROTO = 0 /* reading a protocol message */ 1393 }; 1394 1395 /* minimum Downgrade Minor version */ 1396 #ifndef WOLFSSL_MIN_DOWNGRADE 1397 #ifndef NO_OLD_TLS 1398 #define WOLFSSL_MIN_DOWNGRADE TLSv1_MINOR 1399 #else 1400 #define WOLFSSL_MIN_DOWNGRADE TLSv1_2_MINOR 1401 #endif 1402 #endif 1182 1403 1183 1404 /* Set max implicit IV size for AEAD cipher suites */ … … 1192 1413 /* 150 suites for now! */ 1193 1414 #endif 1415 1416 /* number of items in the signature algo list */ 1417 #ifndef WOLFSSL_MAX_SIGALGO 1418 #define WOLFSSL_MAX_SIGALGO 32 1419 #endif 1420 1194 1421 1195 1422 /* set minimum ECC key size allowed */ … … 1226 1453 #define MIN_RSAKEY_SZ (WOLFSSL_MIN_RSA_BITS / 8) 1227 1454 1228 /* set minimum DH key size allowed */1229 #ifndef WOLFSSL_MIN_DHKEY_BITS1230 #ifdef WOLFSSL_MAX_STRENGTH1231 #define WOLFSSL_MIN_DHKEY_BITS 20481232 #else1233 #define WOLFSSL_MIN_DHKEY_BITS 10241234 #endif1235 #endif1236 #if (WOLFSSL_MIN_DHKEY_BITS % 8)1237 #error DH minimum bit size must be multiple of 81238 #endif1239 #if (WOLFSSL_MIN_DHKEY_BITS > 16000)1240 #error DH minimum bit size must not be greater than 160001241 #endif1242 #define MIN_DHKEY_SZ (WOLFSSL_MIN_DHKEY_BITS / 8)1243 1244 1245 1455 #ifdef SESSION_INDEX 1246 1456 /* Shift values for making a session index */ … … 1290 1500 1291 1501 SERVER_HELLOVERIFYREQUEST_COMPLETE, 1502 SERVER_HELLO_RETRY_REQUEST_COMPLETE, 1292 1503 SERVER_HELLO_COMPLETE, 1293 1504 SERVER_ENCRYPTED_EXTENSIONS_COMPLETE, … … 1295 1506 SERVER_KEYEXCHANGE_COMPLETE, 1296 1507 SERVER_HELLODONE_COMPLETE, 1508 SERVER_CHANGECIPHERSPEC_COMPLETE, 1297 1509 SERVER_FINISHED_COMPLETE, 1298 SERVER_HELLO_RETRY_REQUEST, 1299 1510 1511 CLIENT_HELLO_RETRY, 1300 1512 CLIENT_HELLO_COMPLETE, 1301 1513 CLIENT_KEYEXCHANGE_COMPLETE, 1514 CLIENT_CHANGECIPHERSPEC_COMPLETE, 1302 1515 CLIENT_FINISHED_COMPLETE, 1303 1516 1304 1517 HANDSHAKE_DONE 1305 1518 }; 1306 1307 1308 #if defined(__GNUC__)1309 #define WOLFSSL_PACK __attribute__ ((packed))1310 #else1311 #define WOLFSSL_PACK1312 #endif1313 1519 1314 1520 /* SSL Version */ … … 1339 1545 1340 1546 1341 enum BIO_TYPE {1342 BIO_BUFFER = 1,1343 BIO_SOCKET = 2,1344 BIO_SSL = 3,1345 BIO_MEMORY = 4,1346 BIO_BIO = 5,1347 BIO_FILE = 61348 };1349 1350 1351 1547 /* wolfSSL BIO_METHOD type */ 1352 1548 struct WOLFSSL_BIO_METHOD { … … 1357 1553 /* wolfSSL BIO type */ 1358 1554 struct WOLFSSL_BIO { 1555 WOLFSSL_BUF_MEM* mem_buf; 1359 1556 WOLFSSL* ssl; /* possible associated ssl */ 1360 1557 #ifndef NO_FILESYSTEM … … 1373 1570 int fd; /* possible file descriptor */ 1374 1571 int eof; /* eof flag */ 1572 int flags; 1375 1573 byte type; /* method type */ 1376 1574 byte close; /* close flag */ … … 1388 1586 typedef WOLFSSL_BUFFER_INFO buffer; 1389 1587 1588 typedef struct Suites Suites; 1589 1390 1590 1391 1591 /* defaults to client */ 1392 1592 WOLFSSL_LOCAL void InitSSL_Method(WOLFSSL_METHOD*, ProtocolVersion); 1593 1594 WOLFSSL_LOCAL int InitSSL_Suites(WOLFSSL* ssl); 1595 WOLFSSL_LOCAL int InitSSL_Side(WOLFSSL* ssl, word16 side); 1393 1596 1394 1597 /* for sniffer */ … … 1397 1600 WOLFSSL_LOCAL int DoApplicationData(WOLFSSL* ssl, byte* input, word32* inOutIdx); 1398 1601 /* TLS v1.3 needs these */ 1602 WOLFSSL_LOCAL int HandleTlsResumption(WOLFSSL* ssl, int bogusID, 1603 Suites* clSuites); 1399 1604 WOLFSSL_LOCAL int DoClientHello(WOLFSSL* ssl, const byte* input, word32*, 1400 1605 word32); … … 1405 1610 WOLFSSL_LOCAL int DoServerHello(WOLFSSL* ssl, const byte* input, word32*, 1406 1611 word32); 1612 WOLFSSL_LOCAL int CompleteServerHello(WOLFSSL *ssl); 1407 1613 WOLFSSL_LOCAL int CheckVersion(WOLFSSL *ssl, ProtocolVersion pv); 1408 1614 WOLFSSL_LOCAL void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, 1409 1615 word32 hashSigAlgoSz); 1410 1616 WOLFSSL_LOCAL int DecodePrivateKey(WOLFSSL *ssl, word16* length); 1617 #ifdef HAVE_PK_CALLBACKS 1618 WOLFSSL_LOCAL int GetPrivateKeySigSize(WOLFSSL* ssl); 1619 #ifndef NO_ASN 1620 WOLFSSL_LOCAL int InitSigPkCb(WOLFSSL* ssl, SignatureCtx* sigCtx); 1621 #endif 1622 #endif 1411 1623 WOLFSSL_LOCAL void FreeKeyExchange(WOLFSSL* ssl); 1412 1624 WOLFSSL_LOCAL int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, word32 size); … … 1420 1632 int ivSz); 1421 1633 WOLFSSL_LOCAL int HashInput(WOLFSSL* ssl, const byte* input, int sz); 1422 #if defined( HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)1634 #if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 1423 1635 WOLFSSL_LOCAL int SNI_Callback(WOLFSSL* ssl); 1424 1636 #endif 1425 1637 #ifdef WOLFSSL_TLS13 1426 1638 WOLFSSL_LOCAL int DecryptTls13(WOLFSSL* ssl, byte* output, const byte* input, 1427 word16 sz );1639 word16 sz, const byte* aad, word16 aadSz); 1428 1640 WOLFSSL_LOCAL int DoTls13HandShakeMsgType(WOLFSSL* ssl, byte* input, 1429 1641 word32* inOutIdx, byte type, … … 1432 1644 word32* inOutIdx, word32 totalSz); 1433 1645 WOLFSSL_LOCAL int DoTls13ServerHello(WOLFSSL* ssl, const byte* input, 1434 word32* inOutIdx, word32 helloSz); 1435 #endif 1436 1437 #ifndef NO_CERTS 1438 /* wolfSSL DER buffer */ 1439 typedef struct DerBuffer { 1440 byte* buffer; 1441 void* heap; 1442 word32 length; 1443 int type; /* enum CertType */ 1444 int dynType; /* DYNAMIC_TYPE_* */ 1445 } DerBuffer; 1446 #endif /* !NO_CERTS */ 1646 word32* inOutIdx, word32 helloSz, 1647 byte* extMsgType); 1648 #endif 1649 int TimingPadVerify(WOLFSSL* ssl, const byte* input, int padLen, int t, 1650 int pLen, int content); 1447 1651 1448 1652 … … 1524 1728 1525 1729 /* Cipher Suites holder */ 1526 typedefstruct Suites {1730 struct Suites { 1527 1731 word16 suiteSz; /* suite length in bytes */ 1528 1732 word16 hashSigAlgoSz; /* SigAlgo extension length in bytes */ 1529 1733 byte suites[WOLFSSL_MAX_SUITE_SZ]; 1530 byte hashSigAlgo[ HELLO_EXT_SIGALGO_MAX]; /* sig/algo to offer */1734 byte hashSigAlgo[WOLFSSL_MAX_SIGALGO]; /* sig/algo to offer */ 1531 1735 byte setSuites; /* user set suites from default */ 1532 1736 byte hashAlgo; /* selected hash algorithm */ 1533 1737 byte sigAlgo; /* selected sig algorithm */ 1534 } Suites;1738 }; 1535 1739 1536 1740 … … 1548 1752 typedef unsigned int (*wc_psk_server_callback)(WOLFSSL*, const char*, 1549 1753 unsigned char*, unsigned int); 1754 #ifdef WOLFSSL_TLS13 1755 typedef unsigned int (*wc_psk_client_tls13_callback)(WOLFSSL*, const char*, 1756 char*, unsigned int, unsigned char*, unsigned int, 1757 const char**); 1758 typedef unsigned int (*wc_psk_server_tls13_callback)(WOLFSSL*, const char*, 1759 unsigned char*, unsigned int, const char**); 1760 #endif 1550 1761 #endif /* PSK_TYPES_DEFINED */ 1551 #ifdef WOLFSSL_DTLS 1762 #if defined(WOLFSSL_DTLS) && defined(WOLFSSL_SESSION_EXPORT) && \ 1763 !defined(WOLFSSL_DTLS_EXPORT_TYPES) 1552 1764 typedef int (*wc_dtls_export)(WOLFSSL* ssl, 1553 1765 unsigned char* exportBuffer, unsigned int sz, void* userCtx); 1554 #endif 1766 #define WOLFSSL_DTLS_EXPORT_TYPES 1767 #endif /* WOLFSSL_DTLS_EXPORT_TYPES */ 1555 1768 1556 1769 … … 1592 1805 OcspEntry* ocspList; /* OCSP response list */ 1593 1806 wolfSSL_Mutex ocspLock; /* OCSP list lock */ 1594 #if defined(WOLFSSL_NGINX) || defined (WOLFSSL_HAPROXY) 1807 #if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || \ 1808 defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 1595 1809 int(*statusCb)(WOLFSSL*, void*); 1596 1810 #endif … … 1765 1979 * keep as a constant size (no additional ifdefs) for session export */ 1766 1980 typedef struct Keys { 1767 byte client_write_MAC_secret[MAX_DIGEST_SIZE]; /* max sizes */ 1768 byte server_write_MAC_secret[MAX_DIGEST_SIZE]; 1769 byte client_write_key[AES_256_KEY_SIZE]; /* max sizes */ 1770 byte server_write_key[AES_256_KEY_SIZE]; 1981 #if !defined(WOLFSSL_AEAD_ONLY) || defined(WOLFSSL_TLS13) 1982 byte client_write_MAC_secret[WC_MAX_DIGEST_SIZE]; /* max sizes */ 1983 byte server_write_MAC_secret[WC_MAX_DIGEST_SIZE]; 1984 #endif 1985 byte client_write_key[MAX_SYM_KEY_SIZE]; /* max sizes */ 1986 byte server_write_key[MAX_SYM_KEY_SIZE]; 1771 1987 byte client_write_IV[MAX_WRITE_IV_SZ]; /* max sizes */ 1772 1988 byte server_write_IV[MAX_WRITE_IV_SZ]; … … 1830 2046 TLSX_SESSION_TICKET = 0x0023, 1831 2047 #ifdef WOLFSSL_TLS13 1832 TLSX_KEY_SHARE = 0x0028,1833 2048 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 1834 2049 TLSX_PRE_SHARED_KEY = 0x0029, … … 1844 2059 #ifdef WOLFSSL_POST_HANDSHAKE_AUTH 1845 2060 TLSX_POST_HANDSHAKE_AUTH = 0x0031, 2061 #endif 2062 #if defined(WOLFSSL_TLS13_DRAFT_18) || defined(WOLFSSL_TLS13_DRAFT_22) 2063 TLSX_KEY_SHARE = 0x0028, 2064 #else 2065 TLSX_SIGNATURE_ALGORITHMS_CERT = 0x0032, 2066 TLSX_KEY_SHARE = 0x0033, 1846 2067 #endif 1847 2068 #endif … … 1858 2079 1859 2080 WOLFSSL_LOCAL TLSX* TLSX_Find(TLSX* list, TLSX_Type type); 2081 WOLFSSL_LOCAL void TLSX_Remove(TLSX** list, TLSX_Type type, void* heap); 1860 2082 WOLFSSL_LOCAL void TLSX_FreeAll(TLSX* list, void* heap); 1861 2083 WOLFSSL_LOCAL int TLSX_SupportExtensions(WOLFSSL* ssl); 1862 2084 WOLFSSL_LOCAL int TLSX_PopulateExtensions(WOLFSSL* ssl, byte isRequest); 1863 2085 1864 #ifndef NO_WOLFSSL_CLIENT 1865 WOLFSSL_LOCAL word16 TLSX_GetRequestSize(WOLFSSL* ssl, byte msgType); 1866 WOLFSSL_LOCAL word16 TLSX_WriteRequest(WOLFSSL* ssl, byte* output, 1867 byte msgType); 1868 #endif 1869 1870 #ifndef NO_WOLFSSL_SERVER 1871 WOLFSSL_LOCAL word16 TLSX_GetResponseSize(WOLFSSL* ssl, byte msgType); 1872 WOLFSSL_LOCAL word16 TLSX_WriteResponse(WOLFSSL* ssl, byte* output, 1873 byte msgType); 2086 #if defined(WOLFSSL_TLS13) || !defined(NO_WOLFSSL_CLIENT) 2087 WOLFSSL_LOCAL int TLSX_GetRequestSize(WOLFSSL* ssl, byte msgType, 2088 word16* pLength); 2089 WOLFSSL_LOCAL int TLSX_WriteRequest(WOLFSSL* ssl, byte* output, 2090 byte msgType, word16* pOffset); 2091 #endif 2092 2093 #if defined(WOLFSSL_TLS13) || !defined(NO_WOLFSSL_SERVER) 2094 /* TLS 1.3 Certificate messages have extensions. */ 2095 WOLFSSL_LOCAL int TLSX_GetResponseSize(WOLFSSL* ssl, byte msgType, 2096 word16* pLength); 2097 WOLFSSL_LOCAL int TLSX_WriteResponse(WOLFSSL *ssl, byte* output, byte msgType, 2098 word16* pOffset); 1874 2099 #endif 1875 2100 … … 1900 2125 union { char* host_name; } data; /* SNI Data */ 1901 2126 struct SNI* next; /* List Behavior */ 2127 byte status; /* Matching result */ 1902 2128 #ifndef NO_WOLFSSL_SERVER 1903 2129 byte options; /* Behavior options */ 1904 byte status; /* Matching result */1905 2130 #endif 1906 2131 } SNI; … … 1908 2133 WOLFSSL_LOCAL int TLSX_UseSNI(TLSX** extensions, byte type, const void* data, 1909 2134 word16 size, void* heap); 2135 WOLFSSL_LOCAL byte TLSX_SNI_Status(TLSX* extensions, byte type); 2136 WOLFSSL_LOCAL word16 TLSX_SNI_GetRequest(TLSX* extensions, byte type, 2137 void** data); 1910 2138 1911 2139 #ifndef NO_WOLFSSL_SERVER 1912 2140 WOLFSSL_LOCAL void TLSX_SNI_SetOptions(TLSX* extensions, byte type, 1913 2141 byte options); 1914 WOLFSSL_LOCAL byte TLSX_SNI_Status(TLSX* extensions, byte type);1915 WOLFSSL_LOCAL word16 TLSX_SNI_GetRequest(TLSX* extensions, byte type,1916 void** data);1917 2142 WOLFSSL_LOCAL int TLSX_SNI_GetFromBuffer(const byte* buffer, word32 bufferSz, 1918 2143 byte type, byte* sni, word32* inOutSz); … … 1960 2185 byte status_type; 1961 2186 byte options; 2187 WOLFSSL* ssl; 1962 2188 union { 1963 2189 OcspRequest ocsp; 1964 2190 } request; 2191 #if defined(WOLFSSL_TLS13) && !defined(NO_WOLFSSL_SERVER) 2192 buffer response; 2193 #endif 1965 2194 } CertificateStatusRequest; 1966 2195 1967 2196 WOLFSSL_LOCAL int TLSX_UseCertificateStatusRequest(TLSX** extensions, 1968 byte status_type, byte options, void* heap, int devId);2197 byte status_type, byte options, WOLFSSL* ssl, void* heap, int devId); 1969 2198 #ifndef NO_CERTS 1970 2199 WOLFSSL_LOCAL int TLSX_CSR_InitRequest(TLSX* extensions, DecodedCert* cert, … … 2023 2252 WOLFSSL_LOCAL int TLSX_ValidateSupportedCurves(WOLFSSL* ssl, byte first, 2024 2253 byte second); 2025 #endif 2254 WOLFSSL_LOCAL int TLSX_SupportedCurve_CheckPriority(WOLFSSL* ssl); 2255 #endif 2256 WOLFSSL_LOCAL int TLSX_SupportedCurve_Preferred(WOLFSSL* ssl, 2257 int checkSupported); 2026 2258 2027 2259 #endif /* HAVE_SUPPORTED_CURVES */ … … 2042 2274 typedef struct SecureRenegotiation { 2043 2275 byte enabled; /* secure_renegotiation flag in rfc */ 2276 byte verifySet; 2044 2277 byte startScr; /* server requested client to start scr */ 2045 2278 enum key_cache_state cache_status; /* track key cache state */ … … 2053 2286 2054 2287 #ifdef HAVE_SERVER_RENEGOTIATION_INFO 2055 WOLFSSL_LOCAL int TLSX_AddEmptyRenegotiationInfo(TLSX** extensions , void* heap);2288 WOLFSSL_LOCAL int TLSX_AddEmptyRenegotiationInfo(TLSX** extensions); 2056 2289 #endif 2057 2290 … … 2141 2374 void* key; /* Private key */ 2142 2375 word32 keyLen; /* Private key length */ 2376 byte* pubKey; /* Public key */ 2377 word32 pubKeyLen; /* Public key length */ 2143 2378 struct KeyShareEntry* next; /* List pointer */ 2144 2379 } KeyShareEntry; … … 2148 2383 WOLFSSL_LOCAL int TLSX_KeyShare_Empty(WOLFSSL* ssl); 2149 2384 WOLFSSL_LOCAL int TLSX_KeyShare_Establish(WOLFSSL* ssl); 2385 WOLFSSL_LOCAL int TLSX_KeyShare_DeriveSecret(WOLFSSL* ssl); 2150 2386 2151 2387 2152 2388 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 2389 #ifndef WOLFSSL_TLS13_DRAFT_18 2390 /* Ticket nonce - for deriving PSK. 2391 * Length allowed to be: 1..255. Only support 4 bytes. 2392 */ 2393 typedef struct TicketNonce { 2394 byte len; 2395 byte data[MAX_TICKET_NONCE_SZ]; 2396 } TicketNonce; 2397 #endif 2398 2153 2399 /* The PreSharedKey extension information - entry in a linked list. */ 2154 2400 typedef struct PreSharedKey { … … 2159 2405 byte cipherSuite; /* Cipher Suite */ 2160 2406 word32 binderLen; /* Length of HMAC */ 2161 byte binder[ MAX_DIGEST_SIZE]; /* HMAC of hanshake */2407 byte binder[WC_MAX_DIGEST_SIZE]; /* HMAC of hanshake */ 2162 2408 byte hmac; /* HMAC algorithm */ 2163 2409 byte resumption:1; /* Resumption PSK */ … … 2212 2458 2213 2459 2460 #ifdef OPENSSL_EXTRA 2461 enum SetCBIO { 2462 WOLFSSL_CBIO_NONE = 0, 2463 WOLFSSL_CBIO_RECV = 0x1, 2464 WOLFSSL_CBIO_SEND = 0x2, 2465 }; 2466 #endif 2467 2214 2468 /* wolfSSL context type */ 2215 2469 struct WOLFSSL_CTX { … … 2232 2486 WOLF_STACK_OF(WOLFSSL_X509_NAME)* ca_names; 2233 2487 #endif 2234 #if defined(WOLFSSL_NGINX) || defined (WOLFSSL_HAPROXY) 2488 #if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || \ 2489 defined(WOLFSSL_NGINX) || defined (WOLFSSL_HAPROXY) 2235 2490 WOLF_STACK_OF(WOLFSSL_X509)* x509Chain; 2236 2491 #endif … … 2249 2504 Suites* suites; /* make dynamic, user may not need/set */ 2250 2505 void* heap; /* for user memory overrides */ 2251 byte verifyPeer; 2252 byte verifyNone; 2253 byte failNoCert; 2254 byte failNoCertxPSK; /* fail if no cert with the exception of PSK*/ 2255 byte sessionCacheOff; 2256 byte sessionCacheFlushOff; 2506 byte verifyDepth; 2507 byte verifyPeer:1; 2508 byte verifyNone:1; 2509 byte failNoCert:1; 2510 byte failNoCertxPSK:1; /* fail if no cert with the exception of PSK*/ 2511 byte sessionCacheOff:1; 2512 byte sessionCacheFlushOff:1; 2257 2513 #ifdef HAVE_EXT_CACHE 2258 byte internalCacheOff ;2259 #endif 2260 byte sendVerify ; /* for client side*/2261 byte haveRSA ;/* RSA available */2262 byte haveECC ;/* ECC available */2263 byte haveDH ;/* server DH parms set by user */2264 byte haveNTRU ;/* server private NTRU key loaded */2265 byte haveECDSAsig ;/* server cert signed w/ ECDSA */2266 byte haveStaticECC ;/* static server ECC private key */2267 byte partialWrite ;/* only one msg per write call */2268 byte quietShutdown ;/* don't send close notify */2269 byte groupMessages ;/* group handshake messages before sending */2514 byte internalCacheOff:1; 2515 #endif 2516 byte sendVerify:2; /* for client side (can not be single bit) */ 2517 byte haveRSA:1; /* RSA available */ 2518 byte haveECC:1; /* ECC available */ 2519 byte haveDH:1; /* server DH parms set by user */ 2520 byte haveNTRU:1; /* server private NTRU key loaded */ 2521 byte haveECDSAsig:1; /* server cert signed w/ ECDSA */ 2522 byte haveStaticECC:1; /* static server ECC private key */ 2523 byte partialWrite:1; /* only one msg per write call */ 2524 byte quietShutdown:1; /* don't send close notify */ 2525 byte groupMessages:1; /* group handshake messages before sending */ 2270 2526 byte minDowngrade; /* minimum downgrade version */ 2271 byte haveEMS ;/* have extended master secret extension */2527 byte haveEMS:1; /* have extended master secret extension */ 2272 2528 byte useClientOrder:1; /* Use client's cipher preference order */ 2273 2529 #ifdef WOLFSSL_TLS13 … … 2278 2534 byte postHandshakeAuth:1; /* Post-handshake auth supported. */ 2279 2535 #endif 2536 #ifndef NO_DH 2537 #if !defined(WOLFSSL_OLD_PRIME_CHECK) && !defined(HAVE_FIPS) && \ 2538 !defined(HAVE_SELFTEST) 2539 byte dhKeyTested:1; /* Set when key has been tested. */ 2540 #endif 2541 #endif 2280 2542 #ifdef WOLFSSL_MULTICAST 2281 2543 byte haveMcast; /* multicast requested */ … … 2288 2550 #ifndef NO_DH 2289 2551 word16 minDhKeySz; /* minimum DH key size */ 2552 word16 maxDhKeySz; /* maximum DH key size */ 2290 2553 #endif 2291 2554 #ifndef NO_RSA … … 2295 2558 short minEccKeySz; /* minimum ECC key size */ 2296 2559 #endif 2560 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) 2561 unsigned long mask; /* store SSL_OP_ flags */ 2562 #endif 2297 2563 #ifdef OPENSSL_EXTRA 2564 byte sessionCtx[ID_LEN]; /* app session context ID */ 2298 2565 word32 disabledCurves; /* curves disabled by user */ 2299 byte verifyDepth; /* maximum verification depth */ 2300 unsigned long mask; /* store SSL_OP_ flags */ 2566 const unsigned char *alpn_cli_protos;/* ALPN client protocol list */ 2567 unsigned int alpn_cli_protos_len; 2568 byte sessionCtxSz; 2569 byte cbioFlag; /* WOLFSSL_CBIO_RECV/SEND: CBIORecv/Send is set */ 2570 CallbackInfoState* CBIS; /* used to get info about SSL state */ 2301 2571 #endif 2302 2572 CallbackIORecv CBIORecv; … … 2304 2574 #ifdef WOLFSSL_DTLS 2305 2575 CallbackGenCookie CBIOCookie; /* gen cookie callback */ 2306 wc_dtls_export dtls_export; /* export function for DTLS session */2307 2576 #ifdef WOLFSSL_SESSION_EXPORT 2577 wc_dtls_export dtls_export; /* export function for DTLS session */ 2308 2578 CallbackGetPeer CBGetPeer; 2309 2579 CallbackSetPeer CBSetPeer; … … 2317 2587 #ifdef HAVE_ECC 2318 2588 word16 eccTempKeySz; /* in octets 20 - 66 */ 2589 #endif 2590 #if defined(HAVE_ECC) || defined(HAVE_ED25519) 2319 2591 word32 pkCurveOID; /* curve Ecc_Sum */ 2320 2592 #endif … … 2323 2595 wc_psk_client_callback client_psk_cb; /* client callback */ 2324 2596 wc_psk_server_callback server_psk_cb; /* server callback */ 2597 #ifdef WOLFSSL_TLS13 2598 wc_psk_client_tls13_callback client_psk_tls13_cb; /* client callback */ 2599 wc_psk_server_tls13_callback server_psk_tls13_cb; /* server callback */ 2600 #endif 2325 2601 char server_hint[MAX_PSK_ID_LEN + NULL_TERM_LEN]; 2326 2602 #endif /* HAVE_SESSION_TICKET || !NO_PSK */ 2603 #ifdef WOLFSSL_TLS13 2604 word16 group[WOLFSSL_MAX_GROUP_COUNT]; 2605 byte numGroups; 2606 #endif 2327 2607 #ifdef WOLFSSL_EARLY_DATA 2328 2608 word32 maxEarlyDataSz; … … 2331 2611 byte haveAnon; /* User wants to allow Anon suites */ 2332 2612 #endif /* HAVE_ANON */ 2613 #ifdef WOLFSSL_ENCRYPTED_KEYS 2614 pem_password_cb* passwd_cb; 2615 void* passwd_userdata; 2616 #endif 2333 2617 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) 2334 pem_password_cb* passwd_cb;2335 void* userdata;2336 2618 WOLFSSL_X509_STORE x509_store; /* points to ctx->cm */ 2619 WOLFSSL_X509_STORE* x509_store_pt; /* take ownership of external store */ 2337 2620 byte readAhead; 2338 2621 void* userPRFArg; /* passed to prf callback */ 2339 #endif /* OPENSSL_EXTRA */2622 #endif 2340 2623 #ifdef HAVE_EX_DATA 2341 2624 void* ex_data[MAX_EX_DATA]; 2342 2625 #endif 2343 #if defined(HAVE_ALPN) && (defined( WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY))2626 #if defined(HAVE_ALPN) && (defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)) 2344 2627 CallbackALPNSelect alpnSelect; 2345 2628 void* alpnSelectArg; 2346 2629 #endif 2347 #if defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 2630 #if defined(OPENSSL_ALL) || (defined(OPENSSL_EXTRA) && (defined(HAVE_STUNNEL) || \ 2631 defined(WOLFSSL_NGINX) || defined(HAVE_LIGHTY) || \ 2632 defined(WOLFSSL_HAPROXY))) 2348 2633 CallbackSniRecv sniRecvCb; 2349 2634 void* sniRecvCbArg; … … 2385 2670 #ifdef HAVE_PK_CALLBACKS 2386 2671 #ifdef HAVE_ECC 2672 CallbackEccKeyGen EccKeyGenCb; /* User EccKeyGen Callback Handler */ 2387 2673 CallbackEccSign EccSignCb; /* User EccSign Callback handler */ 2388 2674 CallbackEccVerify EccVerifyCb; /* User EccVerify Callback handler */ … … 2395 2681 #endif 2396 2682 #ifdef HAVE_CURVE25519 2397 /* User EccSharedSecret Callback handler */ 2683 /* User X25519 KeyGen Callback Handler */ 2684 CallbackX25519KeyGen X25519KeyGenCb; 2685 /* User X25519 SharedSecret Callback handler */ 2398 2686 CallbackX25519SharedSecret X25519SharedSecretCb; 2399 2687 #endif 2400 2688 #endif /* HAVE_ECC */ 2689 #ifndef NO_DH 2690 CallbackDhAgree DhAgreeCb; /* User DH Agree Callback handler */ 2691 #endif 2401 2692 #ifndef NO_RSA 2402 CallbackRsaSign RsaSignCb; /* User RsaSign Callback handler */ 2403 CallbackRsaVerify RsaVerifyCb; /* User RsaVerify Callback handler */ 2693 CallbackRsaSign RsaSignCb; /* User RsaSign Callback handler (priv key) */ 2694 CallbackRsaVerify RsaVerifyCb; /* User RsaVerify Callback handler (pub key) */ 2695 CallbackRsaVerify RsaSignCheckCb; /* User VerifyRsaSign Callback handler (priv key) */ 2404 2696 #ifdef WC_RSA_PSS 2405 CallbackRsaPssSign RsaPssSignCb; /* User RsaPssSign */ 2406 CallbackRsaPssVerify RsaPssVerifyCb; /* User RsaPssVerify */ 2697 CallbackRsaPssSign RsaPssSignCb; /* User RsaSign (priv key) */ 2698 CallbackRsaPssVerify RsaPssVerifyCb; /* User RsaVerify (pub key) */ 2699 CallbackRsaPssVerify RsaPssSignCheckCb; /* User VerifyRsaSign (priv key) */ 2407 2700 #endif 2408 2701 CallbackRsaEnc RsaEncCb; /* User Rsa Public Encrypt handler */ … … 2418 2711 void (*rem_sess_cb)(WOLFSSL_CTX*, WOLFSSL_SESSION*); 2419 2712 #endif 2420 }; 2421 2713 #if defined(OPENSSL_EXTRA) && defined(WOLFCRYPT_HAVE_SRP) && !defined(NO_SHA256) 2714 Srp* srp; /* TLS Secure Remote Password Protocol*/ 2715 byte* srp_password; 2716 #endif 2717 }; 2422 2718 2423 2719 WOLFSSL_LOCAL … … 2531 2827 2532 2828 2829 #ifndef WOLFSSL_AEAD_ONLY 2533 2830 enum CipherType { stream, block, aead }; 2831 #else 2832 enum CipherType { aead }; 2833 #endif 2534 2834 2535 2835 … … 2662 2962 byte serverID[SERVER_ID_LEN]; /* for easier client lookup */ 2663 2963 #endif 2964 #ifdef OPENSSL_EXTRA 2965 byte sessionCtxSz; /* sessionCtx length */ 2966 byte sessionCtx[ID_LEN]; /* app specific context id */ 2967 #endif 2968 #ifdef WOLFSSL_TLS13 2969 word16 namedGroup; 2970 #endif 2664 2971 #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK) 2665 2972 #ifdef WOLFSSL_TLS13 2666 byte namedGroup;2667 2973 word32 ticketSeen; /* Time ticket seen (ms) */ 2668 2974 word32 ticketAdd; /* Added by client */ 2975 #ifndef WOLFSSL_TLS13_DRAFT_18 2976 TicketNonce ticketNonce; /* Nonce used to derive PSK */ 2977 #endif 2669 2978 #endif 2670 2979 #ifdef WOLFSSL_EARLY_DATA 2671 2980 word32 maxEarlyDataSz; 2672 2981 #endif 2982 #endif 2983 #ifdef HAVE_SESSION_TICKET 2673 2984 byte* ticket; 2674 2985 word16 ticketLen; … … 2690 3001 int SetSession(WOLFSSL*, WOLFSSL_SESSION*); 2691 3002 2692 typedef int (*hmacfp) (WOLFSSL*, byte*, const byte*, word32, int, int );3003 typedef int (*hmacfp) (WOLFSSL*, byte*, const byte*, word32, int, int, int); 2693 3004 2694 3005 #ifndef NO_CLIENT_CACHE … … 2731 3042 ACCEPT_FINISHED_DONE, 2732 3043 ACCEPT_THIRD_REPLY_DONE 3044 }; 3045 3046 /* TLS 1.3 server accept state for nonblocking restart */ 3047 enum AcceptStateTls13 { 3048 TLS13_ACCEPT_BEGIN = 0, 3049 TLS13_ACCEPT_CLIENT_HELLO_DONE, 3050 TLS13_ACCEPT_HELLO_RETRY_REQUEST_DONE, 3051 TLS13_ACCEPT_FIRST_REPLY_DONE, 3052 TLS13_ACCEPT_SECOND_REPLY_DONE, 3053 TLS13_SERVER_HELLO_SENT, 3054 TLS13_ACCEPT_THIRD_REPLY_DONE, 3055 TLS13_SERVER_EXTENSIONS_SENT, 3056 TLS13_CERT_REQ_SENT, 3057 TLS13_CERT_SENT, 3058 TLS13_CERT_VERIFY_SENT, 3059 TLS13_ACCEPT_FINISHED_SENT, 3060 TLS13_PRE_TICKET_SENT, 3061 TLS13_ACCEPT_FINISHED_DONE, 3062 TLS13_TICKET_SENT 2733 3063 }; 2734 3064 … … 2765 3095 #ifdef WOLFSSL_TLS13 2766 3096 int certChainCnt; 3097 DerBuffer* certExts; 2767 3098 #endif 2768 3099 #endif … … 2819 3150 wc_psk_client_callback client_psk_cb; 2820 3151 wc_psk_server_callback server_psk_cb; 3152 #ifdef WOLFSSL_TLS13 3153 wc_psk_client_tls13_callback client_psk_tls13_cb; /* client callback */ 3154 wc_psk_server_tls13_callback server_psk_tls13_cb; /* server callback */ 3155 #endif 2821 3156 #endif /* NO_PSK */ 2822 3157 #ifdef OPENSSL_EXTRA … … 2834 3169 word16 internalCacheOff:1; 2835 3170 #endif 2836 word16 side: 1; /* client or server end */3171 word16 side:2; /* client, server or neither end */ 2837 3172 word16 verifyPeer:1; 2838 3173 word16 verifyNone:1; … … 2868 3203 word16 certOnly:1; /* stop once we get cert */ 2869 3204 word16 groupMessages:1; /* group handshake messages */ 2870 word16 usingNonblock:1; /* are we using nonblocking socket */2871 3205 word16 saveArrays:1; /* save array Memory for user get keys 2872 3206 or psk */ … … 2888 3222 #endif 2889 3223 #ifdef WOLFSSL_DTLS 3224 word16 dtlsUseNonblock:1; /* are we using nonblocking socket */ 2890 3225 word16 dtlsHsRetain:1; /* DTLS retaining HS data */ 2891 3226 word16 haveMcast:1; /* using multicast ? */ … … 2909 3244 word16 usingAltCertChain:1;/* Alternate cert chain was used */ 2910 3245 #endif 2911 3246 #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_TLS13_MIDDLEBOX_COMPAT) 3247 word16 sentChangeCipher:1; /* Change Cipher Spec sent */ 3248 #endif 3249 #if !defined(WOLFSSL_NO_CLIENT_AUTH) && defined(HAVE_ED25519) && \ 3250 !defined(NO_ED25519_CLIENT_AUTH) 3251 word16 cacheMessages:1; /* Cache messages for sign/verify */ 3252 #endif 3253 #ifndef NO_DH 3254 #if !defined(WOLFSSL_OLD_PRIME_CHECK) && \ 3255 !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST) 3256 word16 dhDoKeyTest:1; /* Need to do the DH Key prime test */ 3257 word16 dhKeyTested:1; /* Set when key has been tested. */ 3258 #endif 3259 #endif 2912 3260 /* need full byte values for this section */ 2913 3261 byte processReply; /* nonblocking resume */ … … 2929 3277 #ifndef NO_DH 2930 3278 word16 minDhKeySz; /* minimum DH key size */ 3279 word16 maxDhKeySz; /* minimum DH key size */ 2931 3280 word16 dhKeySz; /* actual DH key size */ 2932 3281 #endif … … 2941 3290 #endif 2942 3291 #ifdef WOLFSSL_EARLY_DATA 3292 word16 pskIdIndex; 2943 3293 word32 maxEarlyDataSz; 2944 3294 #endif 2945 3295 #ifdef WOLFSSL_TLS13 3296 byte oldMinor; /* client preferred version < TLS 1.3 */ 3297 #endif 2946 3298 } Options; 2947 3299 … … 2963 3315 byte sessionIDSz; 2964 3316 #ifdef WOLFSSL_TLS13 2965 byte clientSecret[SECRET_LEN];2966 byte serverSecret[SECRET_LEN];2967 3317 byte secret[SECRET_LEN]; 2968 3318 #endif … … 2999 3349 struct WOLFSSL_X509_NAME { 3000 3350 char *name; 3001 char staticName[ASN_NAME_MAX];3002 3351 int dynamicName; 3003 3352 int sz; 3004 #if defined(OPENSSL_EXTRA) && !defined(NO_ASN) 3353 char staticName[ASN_NAME_MAX]; 3354 #if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ 3355 !defined(NO_ASN) 3005 3356 DecodedName fullName; 3006 3357 WOLFSSL_X509_NAME_ENTRY cnEntry; 3358 WOLFSSL_X509_NAME_ENTRY extra[MAX_NAME_ENTRIES]; /* extra entries added */ 3007 3359 WOLFSSL_X509* x509; /* x509 that struct belongs to */ 3008 3360 #endif /* OPENSSL_EXTRA */ 3009 #if def WOLFSSL_NGINX3361 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) 3010 3362 byte raw[ASN_NAME_MAX]; 3011 3363 int rawLen; … … 3023 3375 struct WOLFSSL_X509 { 3024 3376 int version; 3025 WOLFSSL_X509_NAME issuer;3026 WOLFSSL_X509_NAME subject;3027 3377 int serialSz; 3028 byte serial[EXTERNAL_SERIAL_SIZE];3029 char subjectCN[ASN_NAME_MAX]; /* common name short cut */3030 3378 #ifdef WOLFSSL_SEP 3031 3379 int deviceTypeSz; 3380 int hwTypeSz; 3032 3381 byte deviceType[EXTERNAL_SERIAL_SIZE]; 3033 int hwTypeSz;3034 3382 byte hwType[EXTERNAL_SERIAL_SIZE]; 3035 3383 int hwSerialNumSz; 3036 3384 byte hwSerialNum[EXTERNAL_SERIAL_SIZE]; 3037 #if def OPENSSL_EXTRA3385 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) 3038 3386 byte certPolicySet; 3039 3387 byte certPolicyCrit; … … 3041 3389 #endif 3042 3390 int notBeforeSz; 3391 int notAfterSz; 3043 3392 byte notBefore[MAX_DATE_SZ]; 3044 int notAfterSz;3045 3393 byte notAfter[MAX_DATE_SZ]; 3394 buffer sig; 3046 3395 int sigOID; 3047 buffer sig; 3396 DNS_entry* altNames; /* alt names list */ 3397 buffer pubKey; 3048 3398 int pubKeyOID; 3049 buffer pubKey;3050 #if def HAVE_ECC3399 DNS_entry* altNamesNext; /* hint for retrieval */ 3400 #if defined(HAVE_ECC) || defined(HAVE_ED25519) 3051 3401 word32 pkCurveOID; 3052 3402 #endif /* HAVE_ECC */ … … 3054 3404 DerBuffer* derCert; /* may need */ 3055 3405 #endif 3056 DNS_entry* altNames; /* alt names list */3057 DNS_entry* altNamesNext; /* hint for retrieval */3058 3406 void* heap; /* heap hint */ 3059 3407 byte dynamicMemory; /* dynamic memory flag */ 3060 byte isCa ;3408 byte isCa:1; 3061 3409 #ifdef WOLFSSL_CERT_EXT 3062 3410 char certPolicies[MAX_CERTPOL_NB][MAX_CERTPOL_SZ]; 3063 3411 int certPoliciesNb; 3064 3412 #endif /* WOLFSSL_CERT_EXT */ 3065 #if def OPENSSL_EXTRA3413 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) 3066 3414 #ifdef HAVE_EX_DATA 3067 3415 void* ex_data[MAX_EX_DATA]; 3068 3416 #endif 3417 byte* authKeyId; 3418 byte* subjKeyId; 3419 byte* extKeyUsageSrc; 3420 const byte* CRLInfo; 3421 byte* authInfo; 3069 3422 word32 pathLength; 3070 3423 word16 keyUsage; 3071 byte CRLdistSet;3072 byte CRLdistCrit;3073 byte* CRLInfo;3074 3424 int CRLInfoSz; 3075 byte authInfoSet;3076 byte authInfoCrit;3077 byte* authInfo;3078 3425 int authInfoSz; 3079 byte basicConstSet;3080 byte basicConstCrit;3081 byte basicConstPlSet;3082 byte subjAltNameSet;3083 byte subjAltNameCrit;3084 byte authKeyIdSet;3085 byte authKeyIdCrit;3086 byte* authKeyId;3087 3426 word32 authKeyIdSz; 3088 byte subjKeyIdSet;3089 byte subjKeyIdCrit;3090 byte* subjKeyId;3091 3427 word32 subjKeyIdSz; 3092 byte keyUsageSet;3093 byte keyUsageCrit;3094 byte extKeyUsageCrit;3095 byte* extKeyUsageSrc;3096 3428 word32 extKeyUsageSz; 3097 3429 word32 extKeyUsageCount; 3098 #endif /* OPENSSL_EXTRA */ 3430 3431 byte CRLdistSet:1; 3432 byte CRLdistCrit:1; 3433 byte authInfoSet:1; 3434 byte authInfoCrit:1; 3435 byte keyUsageSet:1; 3436 byte keyUsageCrit:1; 3437 byte extKeyUsageCrit:1; 3438 byte subjKeyIdSet:1; 3439 3440 byte subjKeyIdCrit:1; 3441 byte basicConstSet:1; 3442 byte basicConstCrit:1; 3443 byte basicConstPlSet:1; 3444 byte subjAltNameSet:1; 3445 byte subjAltNameCrit:1; 3446 byte authKeyIdSet:1; 3447 byte authKeyIdCrit:1; 3448 #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */ 3449 byte serial[EXTERNAL_SERIAL_SIZE]; 3450 char subjectCN[ASN_NAME_MAX]; /* common name short cut */ 3451 #ifdef WOLFSSL_CERT_REQ 3452 char challengePw[CTC_NAME_SIZE]; /* for REQ certs */ 3453 #endif 3454 WOLFSSL_X509_NAME issuer; 3455 WOLFSSL_X509_NAME subject; 3099 3456 }; 3100 3457 … … 3133 3490 word32 fragSz; /* Length of fragments received */ 3134 3491 word32 seq; /* Handshake sequence number */ 3135 word32 sz; /* Length of whole mes age*/3492 word32 sz; /* Length of whole message */ 3136 3493 byte type; 3137 3494 } DtlsMsg; … … 3150 3507 #endif 3151 3508 3152 3153 3509 /* Handshake messages received from peer (plus change cipher */ 3154 3510 typedef struct MsgsReceived { 3155 3511 word16 got_hello_request:1; 3156 3512 word16 got_client_hello:2; 3157 word16 got_server_hello: 1;3513 word16 got_server_hello:2; 3158 3514 word16 got_hello_verify_request:1; 3159 3515 word16 got_session_ticket:1; … … 3193 3549 wc_Sha512 hashSha512; /* sha512 hash of handshake msgs */ 3194 3550 #endif 3551 #if defined(HAVE_ED25519) && !defined(WOLFSSL_NO_CLIENT_AUTH) 3552 byte* messages; /* handshake messages */ 3553 int length; /* length of handshake messages' data */ 3554 int prevLen; /* length of messages but last */ 3555 #endif 3195 3556 } HS_Hashes; 3196 3557 … … 3232 3593 #endif 3233 3594 3595 #ifdef WOLFSSL_EARLY_DATA 3596 typedef enum EarlyDataState { 3597 no_early_data, 3598 expecting_early_data, 3599 process_early_data, 3600 done_early_data 3601 } EarlyDataState; 3602 #endif 3603 3234 3604 /* wolfSSL ssl type */ 3235 3605 struct WOLFSSL { … … 3237 3607 Suites* suites; /* only need during handshake */ 3238 3608 Arrays* arrays; 3609 #ifdef WOLFSSL_TLS13 3610 byte clientSecret[SECRET_LEN]; 3611 byte serverSecret[SECRET_LEN]; 3612 #endif 3239 3613 HS_Hashes* hsHashes; 3240 3614 void* IOCB_ReadCtx; … … 3249 3623 byte dupSide; /* write side or read side */ 3250 3624 #endif 3625 #ifdef OPENSSL_EXTRA 3626 byte cbioFlag; /* WOLFSSL_CBIO_RECV/SEND: CBIORecv/Send is set */ 3627 #endif 3628 CallbackIORecv CBIORecv; 3629 CallbackIOSend CBIOSend; 3251 3630 #ifdef WOLFSSL_STATIC_MEMORY 3252 3631 WOLFSSL_HEAP_HINT heap_hint; … … 3258 3637 #ifdef WOLFSSL_ASYNC_CRYPT 3259 3638 struct WOLFSSL_ASYNC async; 3639 #elif defined(WOLFSSL_NONBLOCK_OCSP) 3640 void* nonblockarg; /* dynamic arg for handling non-block resume */ 3260 3641 #endif 3261 3642 void* hsKey; /* Handshake key (RsaKey or ecc_key) allocated from heap */ 3262 3643 word32 hsType; /* Type of Handshake key (hsKey) */ 3263 3644 WOLFSSL_CIPHER cipher; 3645 #ifndef WOLFSSL_AEAD_ONLY 3264 3646 hmacfp hmac; 3647 #endif 3265 3648 Ciphers encrypt; 3266 3649 Ciphers decrypt; … … 3279 3662 word32 fragOffset; /* fragment offset */ 3280 3663 word16 curSize; 3664 byte verifyDepth; 3281 3665 RecordLayerHeader curRL; 3282 3666 MsgsReceived msgsReceived; /* peer messages received */ … … 3287 3671 Options options; 3288 3672 #ifdef OPENSSL_EXTRA 3673 CallbackInfoState* CBIS; /* used to get info about SSL state */ 3674 int cbmode; /* read or write on info callback */ 3675 int cbtype; /* event type in info callback */ 3289 3676 WOLFSSL_BIO* biord; /* socket bio read to free/close */ 3290 3677 WOLFSSL_BIO* biowr; /* socket bio write to free/close */ 3678 byte sessionCtx[ID_LEN]; /* app session context ID */ 3291 3679 unsigned long peerVerifyRet; 3292 3680 byte readAhead; 3681 byte sessionCtxSz; /* size of sessionCtx stored */ 3293 3682 #ifdef HAVE_PK_CALLBACKS 3294 3683 void* loggingCtx; /* logging callback argument */ 3295 3684 #endif 3296 #endif 3685 #endif /* OPENSSL_EXTRA */ 3297 3686 #ifndef NO_RSA 3298 3687 RsaKey* peerRsaKey; … … 3313 3702 #ifdef WOLFSSL_TLS13 3314 3703 word16 namedGroup; 3704 word16 group[WOLFSSL_MAX_GROUP_COUNT]; 3705 byte numGroups; 3315 3706 #endif 3316 3707 byte pssAlgo; 3708 #ifdef WOLFSSL_TLS13 3709 #if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22) 3710 word16 certHashSigAlgoSz; /* SigAlgoCert ext length in bytes */ 3711 byte certHashSigAlgo[WOLFSSL_MAX_SIGALGO]; /* cert sig/algo to 3712 * offer */ 3713 #endif /* !WOLFSSL_TLS13_DRAFT_18 && !WOLFSSL_TLS13_DRAFT_22 */ 3714 #endif 3317 3715 #ifdef HAVE_NTRU 3318 3716 word16 peerNtruKeyLen; … … 3332 3730 ecc_key* peerEccKey; /* peer's ECDHE key */ 3333 3731 ecc_key* peerEccDsaKey; /* peer's ECDSA key */ 3334 word32 pkCurveOID; /* curve Ecc_Sum */3335 3732 word16 eccTempKeySz; /* in octets 20 - 66 */ 3336 3733 byte peerEccDsaKeyPresent; 3734 #endif 3735 #if defined(HAVE_ECC) || defined(HAVE_ED25519) 3736 word32 pkCurveOID; /* curve Ecc_Sum */ 3337 3737 #endif 3338 3738 #ifdef HAVE_ED25519 … … 3359 3759 void* IOCB_CookieCtx; /* gen cookie ctx */ 3360 3760 word32 dtls_expected_rx; 3761 #ifdef WOLFSSL_SESSION_EXPORT 3361 3762 wc_dtls_export dtls_export; /* export function for session */ 3763 #endif 3362 3764 #ifdef WOLFSSL_SCTP 3363 3765 word16 dtlsMtuSz; … … 3372 3774 #endif /* WOLFSSL_DTLS */ 3373 3775 #ifdef WOLFSSL_CALLBACKS 3776 TimeoutInfo timeoutInfo; /* info saved during handshake */ 3374 3777 HandShakeInfo handShakeInfo; /* info saved during handshake */ 3375 TimeoutInfo timeoutInfo; /* info saved during handshake */ 3778 #endif 3779 #ifdef OPENSSL_EXTRA 3780 SSL_Msg_Cb protoMsgCb; /* inspect protocol message callback */ 3781 void* protoMsgCtx; /* user set context with msg callback */ 3782 #endif 3783 #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) 3376 3784 byte hsInfoOn; /* track handshake info */ 3377 3785 byte toInfoOn; /* track timeout info */ … … 3420 3828 #ifdef HAVE_ALPN 3421 3829 char* alpn_client_list; /* keep the client's list */ 3422 #if defined( WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)3830 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 3423 3831 CallbackALPNSelect alpnSelect; 3424 3832 void* alpnSelectArg; … … 3436 3844 byte* ocspResp; 3437 3845 int ocspRespSz; 3438 #if defined( WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)3846 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) 3439 3847 char* url; 3440 3848 #endif … … 3444 3852 NetX_Ctx nxCtx; /* NetX IO Context */ 3445 3853 #endif 3854 #if defined(WOLFSSL_APACHE_MYNEWT) && !defined(WOLFSSL_LWIP) 3855 void* mnCtx; /* mynewt mn_socket IO Context */ 3856 #endif /* defined(WOLFSSL_APACHE_MYNEWT) && !defined(WOLFSSL_LWIP) */ 3446 3857 #ifdef SESSION_INDEX 3447 3858 int sessionIndex; /* Session's location in the cache. */ … … 3453 3864 #ifdef HAVE_PK_CALLBACKS 3454 3865 #ifdef HAVE_ECC 3866 void* EccKeyGenCtx; /* EccKeyGen Callback Context */ 3455 3867 void* EccSignCtx; /* Ecc Sign Callback Context */ 3456 3868 void* EccVerifyCtx; /* Ecc Verify Callback Context */ … … 3461 3873 #endif 3462 3874 #ifdef HAVE_CURVE25519 3875 void* X25519KeyGenCtx; /* X25519 KeyGen Callback Context */ 3463 3876 void* X25519SharedSecretCtx; /* X25519 Pms Callback Context */ 3464 3877 #endif 3465 3878 #endif /* HAVE_ECC */ 3879 #ifndef NO_DH 3880 void* DhAgreeCtx; /* DH Pms Callback Context */ 3881 #endif /* !NO_DH */ 3466 3882 #ifndef NO_RSA 3467 3883 void* RsaSignCtx; /* Rsa Sign Callback Context */ … … 3483 3899 #endif /* WOLFSSL_JNI */ 3484 3900 #ifdef WOLFSSL_EARLY_DATA 3485 intearlyData;3901 EarlyDataState earlyData; 3486 3902 word32 earlyDataSz; 3487 3903 #endif … … 3498 3914 3499 3915 3500 enum {3501 IV_SZ = 32, /* max iv sz */3502 NAME_SZ = 80 /* max one line */3503 };3504 3505 3506 typedef struct EncryptedInfo {3507 char name[NAME_SZ]; /* encryption name */3508 byte iv[IV_SZ]; /* encrypted IV */3509 word32 ivSz; /* encrypted IV size */3510 long consumed; /* tracks PEM bytes consumed */3511 byte set; /* if encryption set */3512 WOLFSSL_CTX* ctx; /* CTX owner */3513 } EncryptedInfo;3514 3515 3916 3516 3917 #ifndef NO_CERTS 3517 3518 WOLFSSL_LOCAL int AllocDer(DerBuffer** der, word32 length, int type, void* heap);3519 WOLFSSL_LOCAL void FreeDer(DerBuffer** der);3520 3521 WOLFSSL_LOCAL int PemToDer(const unsigned char* buff, long sz, int type,3522 DerBuffer** pDer, void* heap, EncryptedInfo* info,3523 int* eccKey);3524 3918 3525 3919 WOLFSSL_LOCAL int ProcessBuffer(WOLFSSL_CTX* ctx, const unsigned char* buff, … … 3537 3931 3538 3932 3539 #if def WOLFSSL_CALLBACKS3933 #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) 3540 3934 WOLFSSL_LOCAL 3541 3935 void InitHandShakeInfo(HandShakeInfo*, WOLFSSL*); … … 3543 3937 void FinishHandShakeInfo(HandShakeInfo*); 3544 3938 WOLFSSL_LOCAL 3545 void AddPacketName( const char*, HandShakeInfo*);3939 void AddPacketName(WOLFSSL* ssl, const char* name); 3546 3940 3547 3941 WOLFSSL_LOCAL … … 3550 3944 void FreeTimeoutInfo(TimeoutInfo*, void*); 3551 3945 WOLFSSL_LOCAL 3552 void AddPacketInfo(const char*, TimeoutInfo*, const byte*, int, void*); 3946 void AddPacketInfo(WOLFSSL* ssl, const char* name, int type, 3947 const byte* data, int sz, int write, void* heap); 3553 3948 WOLFSSL_LOCAL 3554 3949 void AddLateName(const char*, TimeoutInfo*); … … 3630 4025 WOLFSSL_LOCAL int SendData(WOLFSSL*, const void*, int); 3631 4026 #ifdef WOLFSSL_TLS13 4027 #ifdef WOLFSSL_TLS13_DRAFT_18 3632 4028 WOLFSSL_LOCAL int SendTls13HelloRetryRequest(WOLFSSL*); 4029 #else 4030 WOLFSSL_LOCAL int SendTls13ServerHello(WOLFSSL*, byte); 4031 #endif 3633 4032 #endif 3634 4033 WOLFSSL_LOCAL int SendCertificate(WOLFSSL*); 3635 4034 WOLFSSL_LOCAL int SendCertificateRequest(WOLFSSL*); 4035 #if defined(HAVE_CERTIFICATE_STATUS_REQUEST) \ 4036 || defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2) 4037 WOLFSSL_LOCAL int CreateOcspResponse(WOLFSSL*, OcspRequest**, buffer*); 4038 #endif 4039 #if defined(HAVE_SECURE_RENEGOTIATION) && \ 4040 defined(HAVE_SERVER_RENEGOTIATION_INFO) 4041 WOLFSSL_LOCAL int SendHelloRequest(WOLFSSL*); 4042 #endif 3636 4043 WOLFSSL_LOCAL int SendCertificateStatus(WOLFSSL*); 3637 4044 WOLFSSL_LOCAL int SendServerKeyExchange(WOLFSSL*); … … 3660 4067 3661 4068 WOLFSSL_LOCAL int SetTicket(WOLFSSL*, const byte*, word32); 4069 WOLFSSL_LOCAL int wolfSSL_GetMaxRecordSize(WOLFSSL* ssl, int maxFragment); 3662 4070 3663 4071 #ifndef NO_CERTS … … 3665 4073 #ifdef WC_RSA_PSS 3666 4074 WOLFSSL_LOCAL int CheckRsaPssPadding(const byte* plain, word32 plainSz, 3667 byte* out, word32 sigSz, 3668 enum wc_HashType hashType); 3669 WOLFSSL_LOCAL int ConvertHashPss(int hashAlgo, enum wc_HashType* hashType, int* mgf); 3670 #endif 3671 WOLFSSL_LOCAL int VerifyRsaSign(WOLFSSL* ssl, 3672 byte* verifySig, word32 sigSz, 3673 const byte* plain, word32 plainSz, 3674 int sigAlgo, int hashAlgo, 3675 RsaKey* key); 4075 byte* out, word32 sigSz, enum wc_HashType hashType); 4076 WOLFSSL_LOCAL int ConvertHashPss(int hashAlgo, 4077 enum wc_HashType* hashType, int* mgf); 4078 #endif 4079 WOLFSSL_LOCAL int VerifyRsaSign(WOLFSSL* ssl, byte* verifySig, 4080 word32 sigSz, const byte* plain, word32 plainSz, int sigAlgo, 4081 int hashAlgo, RsaKey* key, DerBuffer* keyBufInfo); 3676 4082 WOLFSSL_LOCAL int RsaSign(WOLFSSL* ssl, const byte* in, word32 inSz, 3677 4083 byte* out, word32* outSz, int sigAlgo, int hashAlgo, RsaKey* key, 3678 const byte* keyBuf, word32 keySz, void* ctx);4084 DerBuffer* keyBufInfo); 3679 4085 WOLFSSL_LOCAL int RsaVerify(WOLFSSL* ssl, byte* in, word32 inSz, 3680 4086 byte** out, int sigAlgo, int hashAlgo, RsaKey* key, 3681 const byte* keyBuf, word32 keySz, void* ctx);4087 buffer* keyBufInfo); 3682 4088 WOLFSSL_LOCAL int RsaDec(WOLFSSL* ssl, byte* in, word32 inSz, byte** out, 3683 word32* outSz, RsaKey* key, const byte* keyBuf, word32 keySz, void* ctx);4089 word32* outSz, RsaKey* key, DerBuffer* keyBufInfo); 3684 4090 WOLFSSL_LOCAL int RsaEnc(WOLFSSL* ssl, const byte* in, word32 inSz, byte* out, 3685 word32* outSz, RsaKey* key, const byte* keyBuf, word32 keySz, void* ctx);4091 word32* outSz, RsaKey* key, buffer* keyBufInfo); 3686 4092 #endif /* !NO_RSA */ 3687 4093 3688 4094 #ifdef HAVE_ECC 3689 4095 WOLFSSL_LOCAL int EccSign(WOLFSSL* ssl, const byte* in, word32 inSz, 3690 byte* out, word32* outSz, ecc_key* key, byte* keyBuf, word32 keySz, 3691 void* ctx); 4096 byte* out, word32* outSz, ecc_key* key, DerBuffer* keyBufInfo); 3692 4097 WOLFSSL_LOCAL int EccVerify(WOLFSSL* ssl, const byte* in, word32 inSz, 3693 const byte* out, word32 outSz, ecc_key* key, byte* keyBuf, word32 keySz, 3694 void* ctx); 4098 const byte* out, word32 outSz, ecc_key* key, buffer* keyBufInfo); 3695 4099 WOLFSSL_LOCAL int EccSharedSecret(WOLFSSL* ssl, ecc_key* priv_key, 3696 4100 ecc_key* pub_key, byte* pubKeyDer, word32* pubKeySz, byte* out, 3697 word32* outlen, int side , void* ctx);4101 word32* outlen, int side); 3698 4102 #endif /* HAVE_ECC */ 3699 4103 #ifdef HAVE_ED25519 4104 WOLFSSL_LOCAL int Ed25519CheckPubKey(WOLFSSL* ssl); 3700 4105 WOLFSSL_LOCAL int Ed25519Sign(WOLFSSL* ssl, const byte* in, word32 inSz, 3701 byte* out, word32* outSz, ed25519_key* key, byte* keyBuf, 3702 word32 keySz, void* ctx); 4106 byte* out, word32* outSz, ed25519_key* key, DerBuffer* keyBufInfo); 3703 4107 WOLFSSL_LOCAL int Ed25519Verify(WOLFSSL* ssl, const byte* in, 3704 4108 word32 inSz, const byte* msg, word32 msgSz, ed25519_key* key, 3705 b yte* keyBuf, word32 keySz, void* ctx);4109 buffer* keyBufInfo); 3706 4110 #endif /* HAVE_ED25519 */ 3707 4111 … … 3734 4138 #ifndef NO_TLS 3735 4139 WOLFSSL_LOCAL int MakeTlsMasterSecret(WOLFSSL*); 4140 #ifndef WOLFSSL_AEAD_ONLY 3736 4141 WOLFSSL_LOCAL int TLS_hmac(WOLFSSL* ssl, byte* digest, const byte* in, 3737 word32 sz, int content, int verify); 4142 word32 sz, int padSz, int content, int verify); 4143 #endif 3738 4144 #endif 3739 4145 … … 3788 4194 #endif 3789 4195 3790 WOLFSSL_LOCAL const char* const* GetCipherNames(void); 4196 typedef struct CipherSuiteInfo { 4197 const char* name; 4198 #ifndef NO_ERROR_STRINGS 4199 const char* name_iana; 4200 #endif 4201 byte cipherSuite0; 4202 byte cipherSuite; 4203 } CipherSuiteInfo; 4204 4205 WOLFSSL_LOCAL const CipherSuiteInfo* GetCipherNames(void); 3791 4206 WOLFSSL_LOCAL int GetCipherNamesSize(void); 3792 WOLFSSL_LOCAL const char* GetCipherNameInternal(const char* cipherName, int cipherSuite); 4207 WOLFSSL_LOCAL const char* GetCipherNameInternal(const byte cipherSuite0, const byte cipherSuite); 4208 WOLFSSL_LOCAL const char* GetCipherNameIana(const byte cipherSuite0, const byte cipherSuite); 3793 4209 WOLFSSL_LOCAL const char* wolfSSL_get_cipher_name_internal(WOLFSSL* ssl); 3794 WOLFSSL_LOCAL const char* wolfSSL_get_cipher_name_from_suite( 3795 const unsigned char cipherSuite, const unsigned char cipherSuite0); 4210 WOLFSSL_LOCAL const char* wolfSSL_get_cipher_name_iana(WOLFSSL* ssl); 4211 WOLFSSL_LOCAL int GetCipherSuiteFromName(const char* name, byte* cipherSuite0, 4212 byte* cipherSuite); 3796 4213 3797 4214 enum encrypt_side {
Note:
See TracChangeset
for help on using the changeset viewer.