@@ -427,6 +427,18 @@ if(WOLFSSL_DTLS_CID)
427427 list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_DTLS_CID" )
428428endif ()
429429
430+ # DTLS 1.3 ClientHello fragmenting
431+ add_option("WOLFSSL_DTLS_CH_FRAG"
432+ "Enable wolfSSL DTLS 1.3 ClientHello fragmenting (default: disabled)"
433+ "no" "yes;no" )
434+
435+ if (WOLFSSL_DTLS_CH_FRAG)
436+ if (NOT WOLFSSL_DTLS13)
437+ message (FATAL_ERROR "DTLS 1.3 Fragment ClientHello is supported only for DTLSv1.3" )
438+ endif ()
439+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_DTLS_CH_FRAG" )
440+ endif ()
441+
430442# RNG
431443add_option("WOLFSSL_RNG"
432444 "Enable compiling and using RNG (default: enabled)"
@@ -601,13 +613,58 @@ add_option(WOLFSSL_OQS
601613# ML-KEM/Kyber
602614add_option(WOLFSSL_MLKEM
603615 "Enable the wolfSSL PQ ML-KEM library (default: disabled)"
604- "no" "yes;no" )
616+ "yes" "yes;no" )
617+
618+ if (WOLFSSL_MLKEM)
619+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_HAVE_MLKEM" )
620+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_WC_MLKEM" )
621+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHA3" )
622+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE128" )
623+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE256" )
624+
625+ set_wolfssl_definitions("WOLFSSL_HAVE_MLKEM" RESULT)
626+ set_wolfssl_definitions("WOLFSSL_WC_MLKEM" RESULT)
627+ set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
628+ set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
629+ set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
630+ endif ()
631+
632+ # When MLKEM and DTLS 1.3 are both enabled, DTLS ClientHello fragmenting is
633+ # required (PQC keys in ClientHello can exceed MTU), so enable it automatically.
634+ if (WOLFSSL_MLKEM AND WOLFSSL_DTLS13 AND NOT WOLFSSL_DTLS_CH_FRAG)
635+ message (STATUS "MLKEM and DTLS 1.3 are enabled; enabling DTLS ClientHello fragmenting" )
636+ override_cache(WOLFSSL_DTLS_CH_FRAG "yes" )
637+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_DTLS_CH_FRAG" )
638+ endif ()
639+
640+ # Disable ML-KEM as standalone TLS key exchange (non-hybrid); when enabled (default), standalone is disabled
641+ add_option(WOLFSSL_TLS_NO_MLKEM_STANDALONE
642+ "Disable ML-KEM as standalone TLS key exchange (non-hybrid) (default: enabled, i.e. standalone disabled)"
643+ "yes" "yes;no" )
644+
645+ if (WOLFSSL_TLS_NO_MLKEM_STANDALONE)
646+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_TLS_NO_MLKEM_STANDALONE" )
647+ endif ()
605648
606649# Dilithium
607650add_option(WOLFSSL_DILITHIUM
608651 "Enable the wolfSSL PQ Dilithium (ML-DSA) implementation (default: disabled)"
609652 "no" "yes;no" )
610653
654+ if (WOLFSSL_DILITHIUM)
655+ list (APPEND WOLFSSL_DEFINITIONS "-DHAVE_DILITHIUM" )
656+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_WC_DILITHIUM" )
657+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHA3" )
658+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE128" )
659+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE256" )
660+
661+ set_wolfssl_definitions("HAVE_DILITHIUM" RESULT)
662+ set_wolfssl_definitions("WOLFSSL_WC_DILITHIUM" RESULT)
663+ set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
664+ set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
665+ set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
666+ endif ()
667+
611668# LMS
612669add_option(WOLFSSL_LMS
613670 "Enable the PQ LMS Stateful Hash-based Signature Scheme (default: disabled)"
@@ -617,11 +674,31 @@ add_option(WOLFSSL_LMSSHA256192
617674 "Enable the LMS SHA_256_192 truncated variant (default: disabled)"
618675 "no" "yes;no" )
619676
677+ if (WOLFSSL_LMS)
678+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_HAVE_LMS" )
679+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_WC_LMS" )
680+
681+ set_wolfssl_definitions("WOLFSSL_HAVE_LMS" RESULT)
682+ set_wolfssl_definitions("WOLFSSL_WC_LMS" RESULT)
683+
684+ if (WOLFSSL_LMSSHA256192)
685+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_LMS_SHA256_192" )
686+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_NO_LMS_SHA256_256" )
687+
688+ set_wolfssl_definitions("WOLFSSL_LMS_SHA256_192" RESULT)
689+ set_wolfssl_definitions("WOLFSSL_NO_LMS_SHA256_256" RESULT)
690+ endif ()
691+ endif ()
692+
620693# Experimental features
621694add_option(WOLFSSL_EXPERIMENTAL
622695 "Enable experimental features (default: disabled)"
623696 "no" "yes;no" )
624697
698+ add_option(WOLFSSL_EXTRA_PQC_HYBRIDS
699+ "Enable extra PQ/T hybrid combinations (default: disabled)"
700+ "no" "yes;no" )
701+
625702message (STATUS "Looking for WOLFSSL_EXPERIMENTAL" )
626703if (WOLFSSL_EXPERIMENTAL)
627704 message (STATUS "Looking for WOLFSSL_EXPERIMENTAL - found" )
@@ -657,75 +734,14 @@ if (WOLFSSL_EXPERIMENTAL)
657734 message (STATUS "Looking for WOLFSSL_OQS - not found" )
658735 endif ()
659736
660- # Checking for experimental feature: WOLFSSL_MLKEM
661- message (STATUS "Looking for WOLFSSL_MLKEM" )
662- if (WOLFSSL_MLKEM)
663- set (WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 1)
664-
665- message (STATUS "Automatically set related requirements for ML-KEM:" )
666- add_definitions ("-DWOLFSSL_HAVE_MLKEM" )
667- add_definitions ("-DWOLFSSL_WC_MLKEM" )
668- add_definitions ("-DWOLFSSL_SHA3" )
669- add_definitions ("-DWOLFSSL_SHAKE128" )
670- add_definitions ("-DWOLFSSL_SHAKE256" )
671-
672- set_wolfssl_definitions("WOLFSSL_HAVE_MLKEM" RESULT)
673- set_wolfssl_definitions("WOLFSSL_WC_MLKEM" RESULT)
674- set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
675- set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
676- set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
677- message (STATUS "Looking for WOLFSSL_MLKEM - found" )
678- else ()
679- message (STATUS "Looking for WOLFSSL_MLKEM - not found" )
680- endif ()
681-
682- # Checking for experimental feature: WOLFSSL_LMS
683- message (STATUS "Looking for WOLFSSL_LMS" )
684- if (WOLFSSL_LMS)
685- set (WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 2)
686-
687- message (STATUS "Automatically set related requirements for LMS" )
688- add_definitions ("-DWOLFSSL_HAVE_LMS" )
689- add_definitions ("-DWOLFSSL_WC_LMS" )
690- set_wolfssl_definitions("WOLFSSL_HAVE_LMS" RESULT)
691- set_wolfssl_definitions("WOLFSSL_WC_LMS" RESULT)
692- message (STATUS "Looking for WOLFSSL_LMS - found" )
693- # Checking for experimental feature: WOLFSSL_LMSSHA256192
694- if (WOLFSSL_LMSSHA256192)
695- message (STATUS "Automatically set related requirements for LMS SHA256-192" )
696- add_definitions ("-DWOLFSSL_LMS_SHA256_192" )
697- add_definitions ("-DWOLFSSL_NO_LMS_SHA256_256" )
698- set_wolfssl_definitions("WOLFSSL_LMS_SHA256_192" RESULT)
699- set_wolfssl_definitions("WOLFSSL_NO_LMS_SHA256_256" RESULT)
700- message (STATUS "Looking for WOLFSSL_LMSSHA256192 - found" )
701- else ()
702- message (STATUS "Looking for WOLFSSL_LMSSHA256192 - not found" )
703- endif ()
704- else ()
705- message (STATUS "Looking for WOLFSSL_LMS - not found" )
706- endif ()
707-
708- # Checking for experimental feature: Dilithium
709- message (STATUS "Looking for WOLFSSL_DILITHIUM" )
710- if (WOLFSSL_DILITHIUM)
737+ # Checking for experimental feature: extra PQ/T hybrid combinations
738+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS" )
739+ if (WOLFSSL_EXTRA_PQC_HYBRIDS)
711740 set (WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 1)
712-
713- message (STATUS "Automatically set related requirements for Dilithium:" )
714- add_definitions ("-DHAVE_DILITHIUM" )
715- add_definitions ("-DWOLFSSL_WC_DILITHIUM" )
716- add_definitions ("-DWOLFSSL_SHA3" )
717- add_definitions ("-DWOLFSSL_SHAKE128" )
718- add_definitions ("-DWOLFSSL_SHAKE256" )
719-
720- message (STATUS "Automatically set related requirements for Dilithium:" )
721- set_wolfssl_definitions("HAVE_DILITHIUM" RESULT)
722- set_wolfssl_definitions("WOLFSSL_WC_DILITHIUM" RESULT)
723- set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
724- set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
725- set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
726- message (STATUS "Looking for WOLFSSL_DILITHIUM - found" )
741+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS - found" )
742+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_EXTRA_PQC_HYBRIDS" )
727743 else ()
728- message (STATUS "Looking for WOLFSSL_DILITHIUM - not found" )
744+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS - not found" )
729745 endif ()
730746
731747 # Other experimental feature detection can be added here...
@@ -750,12 +766,6 @@ else()
750766 if (WOLFSSL_OQS)
751767 message (FATAL_ERROR "Error: WOLFSSL_OQS requires WOLFSSL_EXPERIMENTAL at this time." )
752768 endif ()
753- if (WOLFSSL_MLKEM)
754- message (FATAL_ERROR "Error: WOLFSSL_MLKEM requires WOLFSSL_EXPERIMENTAL at this time." )
755- endif ()
756- if (WOLFSSL_DILITHIUM)
757- message (FATAL_ERROR "Error: WOLFSSL_DILITHIUM requires WOLFSSL_EXPERIMENTAL at this time." )
758- endif ()
759769endif ()
760770
761771# LMS
0 commit comments