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)
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."
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,
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,
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)
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);
1643WOLFSSL_LOCAL
int InitSSL_Suites(
WOLFSSL* ssl);
1644WOLFSSL_LOCAL
int InitSSL_Side(
WOLFSSL* ssl, word16 side);
1647WOLFSSL_LOCAL
int DoFinished(
WOLFSSL* ssl,
const byte* input, word32* inOutIdx,
1648 word32 size, word32 totalSz,
int sniff);
1649WOLFSSL_LOCAL
int DoApplicationData(
WOLFSSL* ssl,
byte* input, word32* inOutIdx);
1651WOLFSSL_LOCAL
int HandleTlsResumption(
WOLFSSL* ssl,
int bogusID,
1654WOLFSSL_LOCAL
int FindSuite(
Suites* suites,
byte first,
byte second);
1656WOLFSSL_LOCAL
int DoClientHello(
WOLFSSL* ssl,
const byte* input, word32*,
1659WOLFSSL_LOCAL
int DoTls13ClientHello(
WOLFSSL* ssl,
const byte* input,
1660 word32* inOutIdx, word32 helloSz);
1662WOLFSSL_LOCAL
int DoServerHello(
WOLFSSL* ssl,
const byte* input, word32*,
1664WOLFSSL_LOCAL
int CompleteServerHello(
WOLFSSL *ssl);
1666WOLFSSL_LOCAL
int PickHashSigAlgo(
WOLFSSL* ssl,
const byte* hashSigAlgo,
1667 word32 hashSigAlgoSz);
1668WOLFSSL_LOCAL
int DecodePrivateKey(
WOLFSSL *ssl, word16* length);
1669#ifdef HAVE_PK_CALLBACKS
1670WOLFSSL_LOCAL
int GetPrivateKeySigSize(
WOLFSSL* ssl);
1675WOLFSSL_LOCAL
void FreeKeyExchange(
WOLFSSL* ssl);
1676WOLFSSL_LOCAL
void FreeSuites(
WOLFSSL* ssl);
1677WOLFSSL_LOCAL
int ProcessPeerCerts(
WOLFSSL* ssl,
byte* input, word32* inOutIdx, word32 size);
1678WOLFSSL_LOCAL
int MatchDomainName(
const char* pattern,
int len,
const char* str);
1680WOLFSSL_LOCAL
int CheckAltNames(
DecodedCert* dCert,
char* domain);
1682WOLFSSL_LOCAL
int CheckIPAddr(
DecodedCert* dCert,
char* ipasc);
1685WOLFSSL_LOCAL
int CreateTicket(
WOLFSSL* ssl);
1686WOLFSSL_LOCAL
int HashOutputRaw(
WOLFSSL* ssl,
const byte* output,
int sz);
1687WOLFSSL_LOCAL
int HashOutput(
WOLFSSL* ssl,
const byte* output,
int sz,
1689WOLFSSL_LOCAL
int HashInput(
WOLFSSL* ssl,
const byte* input,
int sz);
1690#if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
1691WOLFSSL_LOCAL
int SNI_Callback(
WOLFSSL* ssl);
1694WOLFSSL_LOCAL
int DecryptTls13(
WOLFSSL* ssl,
byte* output,
const byte* input,
1695 word16 sz,
const byte* aad, word16 aadSz);
1696WOLFSSL_LOCAL
int DoTls13HandShakeMsgType(
WOLFSSL* ssl,
byte* input,
1697 word32* inOutIdx,
byte type,
1698 word32 size, word32 totalSz);
1699WOLFSSL_LOCAL
int DoTls13HandShakeMsg(
WOLFSSL* ssl,
byte* input,
1700 word32* inOutIdx, word32 totalSz);
1701WOLFSSL_LOCAL
int DoTls13ServerHello(
WOLFSSL* ssl,
const byte* input,
1702 word32* inOutIdx, word32 helloSz,
1705int 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)
1800WOLFSSL_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);
1805WOLFSSL_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);
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))
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;
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,
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
2185WOLFSSL_LOCAL
TLSX* TLSX_Find(
TLSX* list, TLSX_Type type);
2186WOLFSSL_LOCAL
void TLSX_Remove(
TLSX** list, TLSX_Type type,
void* heap);
2187WOLFSSL_LOCAL
void TLSX_FreeAll(
TLSX* list,
void* heap);
2188WOLFSSL_LOCAL
int TLSX_SupportExtensions(
WOLFSSL* ssl);
2189WOLFSSL_LOCAL
int TLSX_PopulateExtensions(
WOLFSSL* ssl,
byte isRequest);
2191#if defined(WOLFSSL_TLS13) || !defined(NO_WOLFSSL_CLIENT)
2192WOLFSSL_LOCAL
int TLSX_GetRequestSize(
WOLFSSL* ssl,
byte msgType,
2194WOLFSSL_LOCAL
int TLSX_WriteRequest(
WOLFSSL* ssl,
byte* output,
2195 byte msgType, word16* pOffset);
2198#if defined(WOLFSSL_TLS13) || !defined(NO_WOLFSSL_SERVER)
2200WOLFSSL_LOCAL
int TLSX_GetResponseSize(
WOLFSSL* ssl,
byte msgType,
2202WOLFSSL_LOCAL
int TLSX_WriteResponse(
WOLFSSL *ssl,
byte* output,
byte msgType,
2206WOLFSSL_LOCAL
int TLSX_ParseVersion(
WOLFSSL* ssl,
byte* input, word16 length,
2207 byte msgType,
int* found);
2208WOLFSSL_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
2241WOLFSSL_LOCAL
int TLSX_UseSNI(
TLSX** extensions,
byte type,
const void* data,
2242 word16 size,
void* heap);
2243WOLFSSL_LOCAL
byte TLSX_SNI_Status(
TLSX* extensions,
byte type);
2244WOLFSSL_LOCAL word16 TLSX_SNI_GetRequest(
TLSX* extensions,
byte type,
2247#ifndef NO_WOLFSSL_SERVER
2248WOLFSSL_LOCAL
void TLSX_SNI_SetOptions(
TLSX* extensions,
byte type,
2250WOLFSSL_LOCAL
int TLSX_SNI_GetFromBuffer(
const byte* buffer, word32 bufferSz,
2251 byte type,
byte* sni, word32* inOutSz);
2257#ifdef HAVE_TRUSTED_CA
2266WOLFSSL_LOCAL
int TLSX_UseTrustedCA(
TLSX** extensions,
byte type,
2267 const byte*
id, word16 idSz,
void* heap);
2274 char* protocol_name;
2280WOLFSSL_LOCAL
int TLSX_ALPN_GetRequest(
TLSX* extensions,
2281 void** data, word16 *dataSz);
2283WOLFSSL_LOCAL
int TLSX_UseALPN(
TLSX** extensions,
const void* data,
2284 word16 size,
byte options,
void* heap);
2286WOLFSSL_LOCAL
int TLSX_ALPN_SetOptions(
TLSX** extensions,
const byte option);
2291#ifdef HAVE_MAX_FRAGMENT
2293WOLFSSL_LOCAL
int TLSX_UseMaxFragment(
TLSX** extensions,
byte mfl,
void* heap);
2298#ifdef HAVE_TRUNCATED_HMAC
2300WOLFSSL_LOCAL
int TLSX_UseTruncatedHMAC(
TLSX** extensions,
void* heap);
2305#ifdef HAVE_CERTIFICATE_STATUS_REQUEST
2314#if defined(WOLFSSL_TLS13) && !defined(NO_WOLFSSL_SERVER)
2319WOLFSSL_LOCAL
int TLSX_UseCertificateStatusRequest(
TLSX** extensions,
2320 byte status_type,
byte options,
WOLFSSL* ssl,
void* heap,
int devId);
2322WOLFSSL_LOCAL
int TLSX_CSR_InitRequest(
TLSX* extensions,
DecodedCert* cert,
2325WOLFSSL_LOCAL
void* TLSX_CSR_GetRequest(
TLSX* extensions);
2326WOLFSSL_LOCAL
int TLSX_CSR_ForceRequest(
WOLFSSL* ssl);
2331#ifdef HAVE_CERTIFICATE_STATUS_REQUEST_V2
2343WOLFSSL_LOCAL
int TLSX_UseCertificateStatusRequestV2(
TLSX** extensions,
2344 byte status_type,
byte options,
void* heap,
int devId);
2346WOLFSSL_LOCAL
int TLSX_CSR2_InitRequests(
TLSX* extensions,
DecodedCert* cert,
2347 byte isPeer,
void* heap);
2349WOLFSSL_LOCAL
void* TLSX_CSR2_GetRequest(
TLSX* extensions,
byte status_type,
2351WOLFSSL_LOCAL
int TLSX_CSR2_ForceRequest(
WOLFSSL* ssl);
2356#ifdef HAVE_SUPPORTED_CURVES
2368WOLFSSL_LOCAL
int TLSX_UseSupportedCurve(
TLSX** extensions, word16 name,
2371WOLFSSL_LOCAL
int TLSX_UsePointFormat(
TLSX** extensions,
byte point,
2374#ifndef NO_WOLFSSL_SERVER
2375WOLFSSL_LOCAL
int TLSX_ValidateSupportedCurves(
WOLFSSL* ssl,
byte first,
2377WOLFSSL_LOCAL
int TLSX_SupportedCurve_CheckPriority(
WOLFSSL* ssl);
2378WOLFSSL_LOCAL
int TLSX_SupportedFFDHE_Set(
WOLFSSL* ssl);
2380WOLFSSL_LOCAL
int TLSX_SupportedCurve_Preferred(
WOLFSSL* ssl,
2381 int checkSupported);
2386#if defined(HAVE_SECURE_RENEGOTIATION) \
2387 || defined(HAVE_SERVER_RENEGOTIATION_INFO)
2389enum 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];
2410WOLFSSL_LOCAL
int TLSX_UseSecureRenegotiation(
TLSX** extensions,
void* heap);
2412#ifdef HAVE_SERVER_RENEGOTIATION_INFO
2413WOLFSSL_LOCAL
int TLSX_AddEmptyRenegotiationInfo(
TLSX** extensions,
void* heap);
2419#ifdef HAVE_SESSION_TICKET
2431WOLFSSL_LOCAL
int TLSX_UseSessionTicket(
TLSX** extensions,
2433WOLFSSL_LOCAL
SessionTicket* TLSX_SessionTicket_Create(word32 lifetime,
2434 byte* data, word16 size,
void* heap);
2435WOLFSSL_LOCAL
void TLSX_SessionTicket_Free(
SessionTicket* ticket,
void* heap);
2463WOLFSSL_LOCAL
int TLSX_QSHCipher_Parse(
WOLFSSL* ssl,
const byte* input,
2464 word16 length,
byte isServer);
2465WOLFSSL_LOCAL word16 TLSX_QSHPK_Write(
QSHScheme* list,
byte* output);
2466WOLFSSL_LOCAL word16 TLSX_QSH_GetSize(
QSHScheme* list,
byte isRequest);
2469WOLFSSL_LOCAL
int TLSX_UseQSHScheme(
TLSX** extensions, word16 name,
2470 byte* pKey, word16 pKeySz,
void* heap);
2473WOLFSSL_LOCAL
int QSH_Decrypt(
QSHKey* key,
byte* in, word32 szIn,
2474 byte* out, word16* szOut);
2475#ifndef NO_WOLFSSL_SERVER
2476WOLFSSL_LOCAL
int TLSX_ValidateQSHScheme(
TLSX** extensions, word16 name);
2488WOLFSSL_LOCAL
int TLSX_Cookie_Use(
WOLFSSL* ssl,
byte* data, word16 len,
2489 byte* mac,
byte macSz,
int resp);
2506WOLFSSL_LOCAL
int TLSX_KeyShare_Use(
WOLFSSL* ssl, word16 group, word16 len,
2508WOLFSSL_LOCAL
int TLSX_KeyShare_Empty(
WOLFSSL* ssl);
2509WOLFSSL_LOCAL
int TLSX_KeyShare_Establish(
WOLFSSL* ssl);
2510WOLFSSL_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];
2539WOLFSSL_LOCAL
int TLSX_PreSharedKey_WriteBinders(
PreSharedKey* list,
2540 byte* output,
byte msgType,
2542WOLFSSL_LOCAL
int TLSX_PreSharedKey_GetSizeBinders(
PreSharedKey* list,
2543 byte msgType, word16* pSz);
2544WOLFSSL_LOCAL
int TLSX_PreSharedKey_Use(
WOLFSSL* ssl,
byte* identity,
2545 word16 len, word32 age,
byte hmac,
2546 byte cipherSuite0,
byte cipherSuite,
2551enum PskKeyExchangeMode {
2557#ifndef WOLFSSL_DEF_PSK_CIPHER
2558#define WOLFSSL_DEF_PSK_CIPHER TLS_AES_128_GCM_SHA256
2561WOLFSSL_LOCAL
int TLSX_PskKeModes_Use(
WOLFSSL* ssl,
byte modes);
2563#ifdef WOLFSSL_EARLY_DATA
2564WOLFSSL_LOCAL
int TLSX_EarlyData_Use(
WOLFSSL* ssl, word32 max);
2579enum KeyUpdateRequest {
2580 update_not_requested,
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;
2623 byte privateKeyType:7;
2624 byte privateKeyId:1;
2626 int privateKeyDevId;
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;
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)
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;
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];
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)
2889int DeriveTlsKeys(
WOLFSSL* ssl);
2891int 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;
2929enum KeyExchangeAlgorithm {
2938 ecc_diffie_hellman_kea,
2939 ecc_static_diffie_hellman_kea
2944enum 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))
2975enum 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
2990enum CipherType { stream, block, aead };
2992enum 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)
3035#if defined(WOLFSSL_TLS13) && defined(HAVE_NULL_CIPHER)
3043#ifdef HAVE_ONE_TIME_AUTH
3055WOLFSSL_LOCAL
void InitCiphers(
WOLFSSL* ssl);
3056WOLFSSL_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];
3078WOLFSSL_LOCAL
int BuildCertHashes(
WOLFSSL* ssl,
Hashes* hashes);
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];
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];
3140 byte sessionCtx[ID_LEN];
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;
3177typedef 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
3222enum 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;
3262 DhKey* serverDH_Key;
3278#ifdef WOLFSSL_SEND_HRR_COOKIE
3279 buffer tls13CookieSecret;
3283 #ifndef NO_WOLFSSL_SERVER
3287#ifdef HAVE_PK_CALLBACKS
3305 TLS_ASYNC_BEGIN = 0,
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;
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;
3397#ifdef HAVE_SESSION_TICKET
3398 word16 createTicket:1;
3400 word16 rejectTicket:1;
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;
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];
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;
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)
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
3839typedef enum EarlyDataState {
3842 expecting_early_data,
3854 byte clientSecret[SECRET_LEN];
3855 byte serverSecret[SECRET_LEN];
3859 void* IOCB_WriteCtx;
3862 VerifyCallback verifyCallback;
3864#ifdef HAVE_WRITE_DUP
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
3917 CallbackInfoState* CBIS;
3922 byte sessionCtx[ID_LEN];
3925#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
3926 unsigned long peerVerifyRet;
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)
3958 word16 group[WOLFSSL_MAX_GROUP_COUNT];
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;
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
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
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)
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)
4197WOLFSSL_LOCAL
int SSL_CTX_RefCount(
WOLFSSL_CTX* ctx,
int incr);
4200WOLFSSL_LOCAL
void FreeSSL(
WOLFSSL*,
void* heap);
4201WOLFSSL_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;
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,
4295 PROVISION_CLIENT = 1,
4296 PROVISION_SERVER = 2,
4297 PROVISION_CLIENT_SERVER = 3
4301static const byte client[SIZEOF_SENDER] = { 0x43, 0x4C, 0x4E, 0x54 };
4302static const byte server[SIZEOF_SENDER] = { 0x53, 0x52, 0x56, 0x52 };
4304static const byte tls_client[FINISHED_LABEL_SZ + 1] =
"client finished";
4305static const byte tls_server[FINISHED_LABEL_SZ + 1] =
"server finished";
4315#define kNistCurves_MIN_NAME_LEN 5
4316#define kNistCurves_MAX_NAME_LEN 7
4320WOLFSSL_LOCAL
int SendChangeCipher(
WOLFSSL*);
4321WOLFSSL_LOCAL
int SendTicket(
WOLFSSL*);
4322WOLFSSL_LOCAL
int DoClientTicket(
WOLFSSL*,
const byte*, word32);
4323WOLFSSL_LOCAL
int SendData(
WOLFSSL*,
const void*,
int);
4325#ifdef WOLFSSL_TLS13_DRAFT_18
4326WOLFSSL_LOCAL
int SendTls13HelloRetryRequest(
WOLFSSL*);
4328WOLFSSL_LOCAL
int SendTls13ServerHello(
WOLFSSL*,
byte);
4331WOLFSSL_LOCAL
int SendCertificate(
WOLFSSL*);
4332WOLFSSL_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)
4339WOLFSSL_LOCAL
int SendHelloRequest(
WOLFSSL*);
4341WOLFSSL_LOCAL
int SendCertificateStatus(
WOLFSSL*);
4342WOLFSSL_LOCAL
int SendServerKeyExchange(
WOLFSSL*);
4343WOLFSSL_LOCAL
int SendBuffered(
WOLFSSL*);
4344WOLFSSL_LOCAL
int ReceiveData(
WOLFSSL*,
byte*,
int,
int);
4345WOLFSSL_LOCAL
int SendFinished(
WOLFSSL*);
4346WOLFSSL_LOCAL
int SendAlert(
WOLFSSL*,
int,
int);
4347WOLFSSL_LOCAL
int ProcessReply(
WOLFSSL*);
4349WOLFSSL_LOCAL
int SetCipherSpecs(
WOLFSSL*);
4350WOLFSSL_LOCAL
int MakeMasterSecret(
WOLFSSL*);
4352WOLFSSL_LOCAL
int AddSession(
WOLFSSL*);
4353WOLFSSL_LOCAL
int DeriveKeys(
WOLFSSL* ssl);
4354WOLFSSL_LOCAL
int StoreKeys(
WOLFSSL* ssl,
const byte* keyData,
int side);
4356WOLFSSL_LOCAL
int IsTLS(
const WOLFSSL* ssl);
4357WOLFSSL_LOCAL
int IsAtLeastTLSv1_2(
const WOLFSSL* ssl);
4360WOLFSSL_LOCAL
void FreeHandshakeResources(
WOLFSSL* ssl);
4361WOLFSSL_LOCAL
void ShrinkInputBuffer(
WOLFSSL* ssl,
int forcedFree);
4362WOLFSSL_LOCAL
void ShrinkOutputBuffer(
WOLFSSL* ssl);
4364WOLFSSL_LOCAL
int VerifyClientSuite(
WOLFSSL* ssl);
4366WOLFSSL_LOCAL
int SetTicket(
WOLFSSL*,
const byte*, word32);
4367WOLFSSL_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);
4444WOLFSSL_LOCAL
int BuildTlsHandshakeHash(
WOLFSSL* ssl,
byte* hash,
4446WOLFSSL_LOCAL
int BuildTlsFinished(
WOLFSSL* ssl,
Hashes* hashes,
4447 const byte* sender);
4448WOLFSSL_LOCAL
void FreeArrays(
WOLFSSL* ssl,
int keep);
4449WOLFSSL_LOCAL
int CheckAvailableSize(
WOLFSSL *ssl,
int size);
4450WOLFSSL_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);
4500WOLFSSL_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
4515typedef char cipher_name[MAX_CIPHER_NAME];
4517typedef const char* cipher_name;
4522#ifndef NO_ERROR_STRINGS
4523 cipher_name name_iana;
4527#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT)
4534WOLFSSL_LOCAL
int GetCipherNamesSize(
void);
4535WOLFSSL_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
4541WOLFSSL_LOCAL
const char* GetCipherProtocol(
const byte minor);
4542WOLFSSL_LOCAL
const char* GetCipherKeaStr(
char n[][MAX_SEGMENT_SZ]);
4543WOLFSSL_LOCAL
const char* GetCipherAuthStr(
char n[][MAX_SEGMENT_SZ]);
4544WOLFSSL_LOCAL
const char* GetCipherEncStr(
char n[][MAX_SEGMENT_SZ]);
4545WOLFSSL_LOCAL
const char* GetCipherMacStr(
char n[][MAX_SEGMENT_SZ]);
4546WOLFSSL_LOCAL
int SetCipherBits(
const char* enc);
4548WOLFSSL_LOCAL
const char* GetCipherNameIana(
const byte cipherSuite0,
const byte cipherSuite);
4549WOLFSSL_LOCAL
const char* wolfSSL_get_cipher_name_internal(
WOLFSSL* ssl);
4550WOLFSSL_LOCAL
const char* wolfSSL_get_cipher_name_iana(
WOLFSSL* ssl);
4551WOLFSSL_LOCAL
int GetCipherSuiteFromName(
const char* name,
byte* cipherSuite0,
4555 ENCRYPT_SIDE_ONLY = 1,
4557 ENCRYPT_AND_DECRYPT_SIDE
4560WOLFSSL_LOCAL
int SetKeysSide(
WOLFSSL*,
enum encrypt_side);
4563WOLFSSL_LOCAL
int SetDsaInternal(
WOLFSSL_DSA* dsa);
4564WOLFSSL_LOCAL
int SetDsaExternal(
WOLFSSL_DSA* dsa);
4565#ifndef HAVE_USER_RSA
4566WOLFSSL_LOCAL
int SetRsaExternal(
WOLFSSL_RSA* rsa);
4567WOLFSSL_LOCAL
int SetRsaInternal(
WOLFSSL_RSA* rsa);
4569WOLFSSL_LOCAL
int SetDhInternal(
WOLFSSL_DH* dh);
4570WOLFSSL_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);
4587WOLFSSL_LOCAL
int InitHandshakeHashes(
WOLFSSL* ssl);
4588WOLFSSL_LOCAL
void FreeHandshakeHashes(
WOLFSSL* ssl);
4590WOLFSSL_LOCAL
int BuildMessage(
WOLFSSL* ssl,
byte* output,
int outSz,
4591 const byte* input,
int inSz,
int type,
int hashOutput,
4592 int sizeOnly,
int asyncOkay);
4595int BuildTls13Message(
WOLFSSL* ssl,
byte* output,
int outSz,
const byte* input,
4596 int inSz,
int type,
int hashOutput,
int sizeOnly,
int asyncOkay);
4599WOLFSSL_LOCAL
int AllocKey(
WOLFSSL* ssl,
int type,
void** pKey);
4600WOLFSSL_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:2273
Definition internal.h:3494
Definition internal.h:3242
Definition internal.h:1886
Definition internal.h:1913
Definition internal.h:2333
Definition internal.h:3831
Definition internal.h:2307
Definition internal.h:2909
Definition internal.h:4520
Definition internal.h:3003
Definition internal.h:2483
Definition asn_public.h:170
Definition internal.h:3720
Definition internal.h:4260
Definition internal.h:3727
Definition internal.h:3775
Definition internal.h:4253
Definition internal.h:3060
Definition internal.h:2495
Definition internal.h:2075
Definition internal.h:3752
Definition internal.h:3742
Definition internal.h:3045
Definition internal.h:3330
Definition internal.h:2525
Definition internal.h:2009
Definition internal.h:1597
Definition internal.h:2442
Definition internal.h:2456
Definition internal.h:2449
Definition internal.h:2231
Definition internal.h:2398
Definition internal.h:2421
Definition internal.h:1786
Definition internal.h:2358
Definition internal.h:2259
Definition internal.h:2177
Definition internal.h:2518
Definition asn_public.h:213
Definition asn_public.h:178
Definition internal.h:3806
Definition internal.h:1958
Definition internal.h:1833
Definition internal.h:1924
Definition internal.h:2595
Definition internal.h:2045
Definition internal.h:2052
Definition internal.h:1628
Definition internal.h:1857
Definition internal.h:3109
Definition internal.h:2040
Definition internal.h:3546
Definition internal.h:3102
Definition internal.h:3572
Definition internal.h:3598
Definition internal.h:3849
Definition internal.h:4308
Definition wolfevent.h:83
Definition internal.h:3818
Definition internal.h:1775
Definition curve25519.h:70
Definition callbacks.h:45
Definition callbacks.h:77
Definition wolfcaam_sha.h:68
Definition internal.h:3095
Definition internal.h:3081
Header file containing key wolfSSL API.