@@ -610,13 +610,67 @@ add_option(WOLFSSL_OQS
610610# ML-KEM/Kyber
611611add_option(WOLFSSL_MLKEM
612612 "Enable the wolfSSL PQ ML-KEM library (default: disabled)"
613- "no" "yes;no" )
613+ "yes" "yes;no" )
614+
615+ if (WOLFSSL_MLKEM)
616+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_HAVE_MLKEM" )
617+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_WC_MLKEM" )
618+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHA3" )
619+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE128" )
620+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE256" )
621+
622+ set_wolfssl_definitions("WOLFSSL_HAVE_MLKEM" RESULT)
623+ set_wolfssl_definitions("WOLFSSL_WC_MLKEM" RESULT)
624+ set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
625+ set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
626+ set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
627+ endif ()
628+
629+ # When MLKEM and DTLS 1.3 are both enabled, DTLS ClientHello fragmenting is
630+ # required (PQC keys in ClientHello can exceed MTU), so enable it automatically.
631+ if (WOLFSSL_MLKEM AND WOLFSSL_DTLS13 AND NOT WOLFSSL_DTLS_CH_FRAG)
632+ message (STATUS "MLKEM and DTLS 1.3 are enabled; enabling DTLS ClientHello fragmenting" )
633+ override_cache(WOLFSSL_DTLS_CH_FRAG "yes" )
634+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_DTLS_CH_FRAG" )
635+ endif ()
636+
637+ # Disable ML-KEM as standalone TLS key exchange (non-hybrid); when enabled (default), standalone is disabled
638+ add_option(WOLFSSL_TLS_NO_MLKEM_STANDALONE
639+ "Disable ML-KEM as standalone TLS key exchange (non-hybrid) (default: enabled, i.e. standalone disabled)"
640+ "yes" "yes;no" )
641+
642+ if (WOLFSSL_TLS_NO_MLKEM_STANDALONE)
643+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_TLS_NO_MLKEM_STANDALONE" )
644+ endif ()
645+
646+ # PQ/T hybrid combinations
647+ add_option(WOLFSSL_PQC_HYBRIDS
648+ "Enable PQ/T hybrid combinations (default: enabled)"
649+ "yes" "yes;no" )
650+
651+ if (WOLFSSL_PQC_HYBRIDS)
652+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_PQC_HYBRIDS" )
653+ endif ()
614654
615655# Dilithium
616656add_option(WOLFSSL_DILITHIUM
617657 "Enable the wolfSSL PQ Dilithium (ML-DSA) implementation (default: disabled)"
618658 "no" "yes;no" )
619659
660+ if (WOLFSSL_DILITHIUM)
661+ list (APPEND WOLFSSL_DEFINITIONS "-DHAVE_DILITHIUM" )
662+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_WC_DILITHIUM" )
663+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHA3" )
664+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE128" )
665+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE256" )
666+
667+ set_wolfssl_definitions("HAVE_DILITHIUM" RESULT)
668+ set_wolfssl_definitions("WOLFSSL_WC_DILITHIUM" RESULT)
669+ set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
670+ set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
671+ set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
672+ endif ()
673+
620674# LMS
621675add_option(WOLFSSL_LMS
622676 "Enable the PQ LMS Stateful Hash-based Signature Scheme (default: disabled)"
@@ -626,11 +680,31 @@ add_option(WOLFSSL_LMSSHA256192
626680 "Enable the LMS SHA_256_192 truncated variant (default: disabled)"
627681 "no" "yes;no" )
628682
683+ if (WOLFSSL_LMS)
684+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_HAVE_LMS" )
685+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_WC_LMS" )
686+
687+ set_wolfssl_definitions("WOLFSSL_HAVE_LMS" RESULT)
688+ set_wolfssl_definitions("WOLFSSL_WC_LMS" RESULT)
689+
690+ if (WOLFSSL_LMSSHA256192)
691+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_LMS_SHA256_192" )
692+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_NO_LMS_SHA256_256" )
693+
694+ set_wolfssl_definitions("WOLFSSL_LMS_SHA256_192" RESULT)
695+ set_wolfssl_definitions("WOLFSSL_NO_LMS_SHA256_256" RESULT)
696+ endif ()
697+ endif ()
698+
629699# Experimental features
630700add_option(WOLFSSL_EXPERIMENTAL
631701 "Enable experimental features (default: disabled)"
632702 "no" "yes;no" )
633703
704+ add_option(WOLFSSL_EXTRA_PQC_HYBRIDS
705+ "Enable extra PQ/T hybrid combinations (default: disabled)"
706+ "no" "yes;no" )
707+
634708message (STATUS "Looking for WOLFSSL_EXPERIMENTAL" )
635709if (WOLFSSL_EXPERIMENTAL)
636710 message (STATUS "Looking for WOLFSSL_EXPERIMENTAL - found" )
@@ -666,75 +740,14 @@ if (WOLFSSL_EXPERIMENTAL)
666740 message (STATUS "Looking for WOLFSSL_OQS - not found" )
667741 endif ()
668742
669- # Checking for experimental feature: WOLFSSL_MLKEM
670- message (STATUS "Looking for WOLFSSL_MLKEM" )
671- if (WOLFSSL_MLKEM)
672- set (WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 1)
673-
674- message (STATUS "Automatically set related requirements for ML-KEM:" )
675- add_definitions ("-DWOLFSSL_HAVE_MLKEM" )
676- add_definitions ("-DWOLFSSL_WC_MLKEM" )
677- add_definitions ("-DWOLFSSL_SHA3" )
678- add_definitions ("-DWOLFSSL_SHAKE128" )
679- add_definitions ("-DWOLFSSL_SHAKE256" )
680-
681- set_wolfssl_definitions("WOLFSSL_HAVE_MLKEM" RESULT)
682- set_wolfssl_definitions("WOLFSSL_WC_MLKEM" RESULT)
683- set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
684- set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
685- set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
686- message (STATUS "Looking for WOLFSSL_MLKEM - found" )
687- else ()
688- message (STATUS "Looking for WOLFSSL_MLKEM - not found" )
689- endif ()
690-
691- # Checking for experimental feature: WOLFSSL_LMS
692- message (STATUS "Looking for WOLFSSL_LMS" )
693- if (WOLFSSL_LMS)
694- set (WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 2)
695-
696- message (STATUS "Automatically set related requirements for LMS" )
697- add_definitions ("-DWOLFSSL_HAVE_LMS" )
698- add_definitions ("-DWOLFSSL_WC_LMS" )
699- set_wolfssl_definitions("WOLFSSL_HAVE_LMS" RESULT)
700- set_wolfssl_definitions("WOLFSSL_WC_LMS" RESULT)
701- message (STATUS "Looking for WOLFSSL_LMS - found" )
702- # Checking for experimental feature: WOLFSSL_LMSSHA256192
703- if (WOLFSSL_LMSSHA256192)
704- message (STATUS "Automatically set related requirements for LMS SHA256-192" )
705- add_definitions ("-DWOLFSSL_LMS_SHA256_192" )
706- add_definitions ("-DWOLFSSL_NO_LMS_SHA256_256" )
707- set_wolfssl_definitions("WOLFSSL_LMS_SHA256_192" RESULT)
708- set_wolfssl_definitions("WOLFSSL_NO_LMS_SHA256_256" RESULT)
709- message (STATUS "Looking for WOLFSSL_LMSSHA256192 - found" )
710- else ()
711- message (STATUS "Looking for WOLFSSL_LMSSHA256192 - not found" )
712- endif ()
713- else ()
714- message (STATUS "Looking for WOLFSSL_LMS - not found" )
715- endif ()
716-
717- # Checking for experimental feature: Dilithium
718- message (STATUS "Looking for WOLFSSL_DILITHIUM" )
719- if (WOLFSSL_DILITHIUM)
743+ # Checking for experimental feature: extra PQ/T hybrid combinations
744+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS" )
745+ if (WOLFSSL_EXTRA_PQC_HYBRIDS)
720746 set (WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 1)
721-
722- message (STATUS "Automatically set related requirements for Dilithium:" )
723- add_definitions ("-DHAVE_DILITHIUM" )
724- add_definitions ("-DWOLFSSL_WC_DILITHIUM" )
725- add_definitions ("-DWOLFSSL_SHA3" )
726- add_definitions ("-DWOLFSSL_SHAKE128" )
727- add_definitions ("-DWOLFSSL_SHAKE256" )
728-
729- message (STATUS "Automatically set related requirements for Dilithium:" )
730- set_wolfssl_definitions("HAVE_DILITHIUM" RESULT)
731- set_wolfssl_definitions("WOLFSSL_WC_DILITHIUM" RESULT)
732- set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
733- set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
734- set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
735- message (STATUS "Looking for WOLFSSL_DILITHIUM - found" )
747+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS - found" )
748+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_EXTRA_PQC_HYBRIDS" )
736749 else ()
737- message (STATUS "Looking for WOLFSSL_DILITHIUM - not found" )
750+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS - not found" )
738751 endif ()
739752
740753 # Other experimental feature detection can be added here...
@@ -759,12 +772,6 @@ else()
759772 if (WOLFSSL_OQS)
760773 message (FATAL_ERROR "Error: WOLFSSL_OQS requires WOLFSSL_EXPERIMENTAL at this time." )
761774 endif ()
762- if (WOLFSSL_MLKEM)
763- message (FATAL_ERROR "Error: WOLFSSL_MLKEM requires WOLFSSL_EXPERIMENTAL at this time." )
764- endif ()
765- if (WOLFSSL_DILITHIUM)
766- message (FATAL_ERROR "Error: WOLFSSL_DILITHIUM requires WOLFSSL_EXPERIMENTAL at this time." )
767- endif ()
768775endif ()
769776
770777# LMS
0 commit comments