@@ -610,13 +610,58 @@ 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 ()
614645
615646# Dilithium
616647add_option (WOLFSSL_DILITHIUM
617648 "Enable the wolfSSL PQ Dilithium (ML-DSA) implementation (default: disabled)"
618649 "no" "yes;no" )
619650
651+ if (WOLFSSL_DILITHIUM)
652+ list (APPEND WOLFSSL_DEFINITIONS "-DHAVE_DILITHIUM" )
653+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_WC_DILITHIUM" )
654+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHA3" )
655+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE128" )
656+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SHAKE256" )
657+
658+ set_wolfssl_definitions ("HAVE_DILITHIUM" RESULT )
659+ set_wolfssl_definitions ("WOLFSSL_WC_DILITHIUM" RESULT )
660+ set_wolfssl_definitions ("WOLFSSL_SHA3" RESULT )
661+ set_wolfssl_definitions ("WOLFSSL_SHAKE128" RESULT )
662+ set_wolfssl_definitions ("WOLFSSL_SHAKE256" RESULT )
663+ endif ()
664+
620665# LMS
621666add_option (WOLFSSL_LMS
622667 "Enable the PQ LMS Stateful Hash-based Signature Scheme (default: disabled)"
@@ -626,11 +671,31 @@ add_option(WOLFSSL_LMSSHA256192
626671 "Enable the LMS SHA_256_192 truncated variant (default: disabled)"
627672 "no" "yes;no" )
628673
674+ if (WOLFSSL_LMS)
675+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_HAVE_LMS" )
676+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_WC_LMS" )
677+
678+ set_wolfssl_definitions ("WOLFSSL_HAVE_LMS" RESULT )
679+ set_wolfssl_definitions ("WOLFSSL_WC_LMS" RESULT )
680+
681+ if (WOLFSSL_LMSSHA256192)
682+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_LMS_SHA256_192" )
683+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_NO_LMS_SHA256_256" )
684+
685+ set_wolfssl_definitions ("WOLFSSL_LMS_SHA256_192" RESULT )
686+ set_wolfssl_definitions ("WOLFSSL_NO_LMS_SHA256_256" RESULT )
687+ endif ()
688+ endif ()
689+
629690# Experimental features
630691add_option (WOLFSSL_EXPERIMENTAL
631692 "Enable experimental features (default: disabled)"
632693 "no" "yes;no" )
633694
695+ add_option (WOLFSSL_EXTRA_PQC_HYBRIDS
696+ "Enable extra PQ/T hybrid combinations (default: disabled)"
697+ "no" "yes;no" )
698+
634699message (STATUS "Looking for WOLFSSL_EXPERIMENTAL" )
635700if (WOLFSSL_EXPERIMENTAL)
636701 message (STATUS "Looking for WOLFSSL_EXPERIMENTAL - found" )
@@ -666,75 +731,14 @@ if (WOLFSSL_EXPERIMENTAL)
666731 message (STATUS "Looking for WOLFSSL_OQS - not found" )
667732 endif ()
668733
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)
734+ # Checking for experimental feature: extra PQ/T hybrid combinations
735+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS" )
736+ if (WOLFSSL_EXTRA_PQC_HYBRIDS)
720737 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" )
738+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS - found" )
739+ list (APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_EXTRA_PQC_HYBRIDS" )
736740 else ()
737- message (STATUS "Looking for WOLFSSL_DILITHIUM - not found" )
741+ message (STATUS "Looking for WOLFSSL_EXTRA_PQC_HYBRIDS - not found" )
738742 endif ()
739743
740744 # Other experimental feature detection can be added here...
@@ -759,12 +763,6 @@ else()
759763 if (WOLFSSL_OQS)
760764 message (FATAL_ERROR "Error: WOLFSSL_OQS requires WOLFSSL_EXPERIMENTAL at this time." )
761765 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 ()
768766endif ()
769767
770768# LMS
0 commit comments