Skip to content

Commit f6434cf

Browse files
authored
Merge pull request #8639 from anhu/cmake_pq
Fix building ML-KEM and LMS with cmake
2 parents d9fd107 + f987478 commit f6434cf

4 files changed

Lines changed: 71 additions & 25 deletions

File tree

.github/workflows/cmake.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ jobs:
7777
-DWOLFSSL_TICKET_NONCE_MALLOC:BOOL=yes -DWOLFSSL_TLS13:BOOL=yes -DWOLFSSL_TLSV12:BOOL=yes \
7878
-DWOLFSSL_TLSX:BOOL=yes -DWOLFSSL_TPM:BOOL=yes -DWOLFSSL_CLU:BOOL=yes -DWOLFSSL_USER_SETTINGS:BOOL=no \
7979
-DWOLFSSL_USER_SETTINGS_ASM:BOOL=no -DWOLFSSL_WOLFSSH:BOOL=ON -DWOLFSSL_X86_64_BUILD_ASM:BOOL=yes \
80+
-DWOLFSSL_MLKEM=1 -DWOLFSSL_LMS=1 -DWOLFSSL_LMSSHA256192=1 -DWOLFSSL_EXPERIMENTAL=1 \
8081
-DWOLFSSL_X963KDF:BOOL=yes \
8182
-DCMAKE_C_FLAGS="-DWOLFSSL_DTLS_CH_FRAG" \
8283
..

CMakeLists.txt

Lines changed: 61 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -573,10 +573,19 @@ add_option(WOLFSSL_OQS
573573
"no" "yes;no")
574574

575575
# ML-KEM/Kyber
576-
add_option(WOLFSSL_MMLKEM
576+
add_option(WOLFSSL_MLKEM
577577
"Enable the wolfSSL PQ ML-KEM library (default: disabled)"
578578
"no" "yes;no")
579579

580+
# LMS
581+
add_option(WOLFSSL_LMS
582+
"Enable the PQ LMS Stateful Hash-based Signature Scheme (default: disabled)"
583+
"no" "yes;no")
584+
585+
add_option(WOLFSSL_LMSSHA256192
586+
"Enable the LMS SHA_256_192 truncated variant (default: disabled)"
587+
"no" "yes;no")
588+
580589
# Experimental features
581590
add_option(WOLFSSL_EXPERIMENTAL
582591
"Enable experimental features (default: disabled)"
@@ -590,7 +599,7 @@ if (WOLFSSL_EXPERIMENTAL)
590599
# check if any experimental features are also enabled:
591600
set(WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 0)
592601

593-
set_wolfssl_definitions("WOLFSSL_EXPERIMENTAL_SETTINGS" RESUlT)
602+
set_wolfssl_definitions("WOLFSSL_EXPERIMENTAL_SETTINGS" RESULT)
594603

595604
# Checking for experimental feature: OQS
596605
message(STATUS "Looking for WOLFSSL_OQS")
@@ -605,9 +614,9 @@ if (WOLFSSL_EXPERIMENTAL)
605614
list(APPEND WOLFSSL_LINK_LIBS ${OQS_LIBRARY})
606615
list(APPEND WOLFSSL_INCLUDE_DIRS ${OQS_INCLUDE_DIR})
607616

608-
set_wolfssl_definitions("HAVE_LIBOQS" RESUlT)
609-
set_wolfssl_definitions("HAVE_TLS_EXTENSIONS" RESUlT)
610-
set_wolfssl_definitions("OPENSSL_EXTRA" RESUlT)
617+
set_wolfssl_definitions("HAVE_LIBOQS" RESULT)
618+
set_wolfssl_definitions("HAVE_TLS_EXTENSIONS" RESULT)
619+
set_wolfssl_definitions("OPENSSL_EXTRA" RESULT)
611620

612621
else()
613622
message(STATUS "Checking OQS - not found")
@@ -617,20 +626,52 @@ if (WOLFSSL_EXPERIMENTAL)
617626
message(STATUS "Looking for WOLFSSL_OQS - not found")
618627
endif()
619628

620-
# Checking for experimental feature: Kyber
621-
message(STATUS "Looking for WOLFSSL_KYBER")
622-
if (WOLFSSL_KYBER)
629+
# Checking for experimental feature: WOLFSSL_MLKEM
630+
message(STATUS "Looking for WOLFSSL_MLKEM")
631+
if (WOLFSSL_MLKEM)
623632
set(WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 1)
624633

625-
message(STATUS "Automatically set related requirements for Kyber:")
626-
set_wolfssl_definitions("WOLFSSL_HAVE_MLKEM" RESUlT)
627-
set_wolfssl_definitions("WOLFSSL_WC_MLKEM" RESUlT)
628-
set_wolfssl_definitions("WOLFSSL_SHA3" RESUlT)
629-
set_wolfssl_definitions("WOLFSSL_SHAKE128" RESUlT)
630-
set_wolfssl_definitions("WOLFSSL_SHAKE256" RESUlT)
631-
message(STATUS "Looking for WOLFSSL_KYBER - found")
634+
message(STATUS "Automatically set related requirements for ML-KEM:")
635+
add_definitions("-DWOLFSSL_HAVE_MLKEM")
636+
add_definitions("-DWOLFSSL_WC_MLKEM")
637+
add_definitions("-DWOLFSSL_SHA3")
638+
add_definitions("-DWOLFSSL_SHAKE128")
639+
add_definitions("-DWOLFSSL_SHAKE256")
640+
641+
set_wolfssl_definitions("WOLFSSL_HAVE_MLKEM" RESULT)
642+
set_wolfssl_definitions("WOLFSSL_WC_MLKEM" RESULT)
643+
set_wolfssl_definitions("WOLFSSL_SHA3" RESULT)
644+
set_wolfssl_definitions("WOLFSSL_SHAKE128" RESULT)
645+
set_wolfssl_definitions("WOLFSSL_SHAKE256" RESULT)
646+
message(STATUS "Looking for WOLFSSL_MLKEM - found")
647+
else()
648+
message(STATUS "Looking for WOLFSSL_MLKEM - not found")
649+
endif()
650+
651+
# Checking for experimental feature: WOLFSSL_LMS
652+
message(STATUS "Looking for WOLFSSL_LMS")
653+
if (WOLFSSL_LMS)
654+
set(WOLFSSL_FOUND_EXPERIMENTAL_FEATURE 2)
655+
656+
message(STATUS "Automatically set related requirements for LMS")
657+
add_definitions("-DWOLFSSL_HAVE_LMS")
658+
add_definitions("-DWOLFSSL_WC_LMS")
659+
set_wolfssl_definitions("WOLFSSL_HAVE_LMS" RESULT)
660+
set_wolfssl_definitions("WOLFSSL_WC_LMS" RESULT)
661+
message(STATUS "Looking for WOLFSSL_LMS - found")
662+
# Checking for experimental feature: WOLFSSL_LMSSHA256192
663+
if (WOLFSSL_LMSSHA256192)
664+
message(STATUS "Automatically set related requirements for LMS SHA256-192")
665+
add_definitions("-DWOLFSSL_LMS_SHA256_192")
666+
add_definitions("-DWOLFSSL_NO_LMS_SHA256_256")
667+
set_wolfssl_definitions("WOLFSSL_LMS_SHA256_192" RESULT)
668+
set_wolfssl_definitions("WOLFSSL_NO_LMS_SHA256_256" RESULT)
669+
message(STATUS "Looking for WOLFSSL_LMSSHA256192 - found")
670+
else()
671+
message(STATUS "Looking for WOLFSSL_LMSSHA256192 - not found")
672+
endif()
632673
else()
633-
message(STATUS "Looking for WOLFSSL_KYBER - not found")
674+
message(STATUS "Looking for WOLFSSL_LMS - not found")
634675
endif()
635676

636677
# Other experimental feature detection can be added here...
@@ -643,8 +684,8 @@ if (WOLFSSL_EXPERIMENTAL)
643684
endif()
644685

645686
# Sanity checks
646-
if(WOLFSSL_OQS AND WOLFSSL_KYBER)
647-
message(FATAL_ERROR "Error: cannot enable both WOLFSSL_OQS and WOLFSSL_KYBER at the same time.")
687+
if(WOLFSSL_OQS AND WOLFSSL_MLKEM)
688+
message(FATAL_ERROR "Error: cannot enable both WOLFSSL_OQS and WOLFSSL_MLKEM at the same time.")
648689
endif()
649690

650691
else()
@@ -653,8 +694,8 @@ else()
653694
if (WOLFSSL_OQS)
654695
message(FATAL_ERROR "Error: WOLFSSL_OQS requires WOLFSSL_EXPERIMENTAL at this time.")
655696
endif()
656-
if(WOLFSSL_KYBER)
657-
message(FATAL_ERROR "Error: WOLFSSL_KYBER requires WOLFSSL_EXPERIMENTAL at this time.")
697+
if(WOLFSSL_MLKEM)
698+
message(FATAL_ERROR "Error: WOLFSSL_MLKEM requires WOLFSSL_EXPERIMENTAL at this time.")
658699
endif()
659700
endif()
660701

cmake/functions.cmake

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,14 @@ function(generate_build_flags)
198198
if(WOLFSSL_XCHACHA OR WOLFSSL_USER_SETTINGS)
199199
set(BUILD_XCHACHA "yes" PARENT_SCOPE)
200200
endif()
201-
if(WOLFSSL_KYBER OR WOLFSSL_USER_SETTINGS)
202-
set(BUILD_WC_KYBER "yes" PARENT_SCOPE)
201+
if(WOLFSSL_MLKEM OR WOLFSSL_USER_SETTINGS)
202+
set(BUILD_WC_MLKEM "yes" PARENT_SCOPE)
203203
endif()
204204
if(WOLFSSL_OQS OR WOLFSSL_USER_SETTINGS)
205205
set(BUILD_FALCON "yes" PARENT_SCOPE)
206206
set(BUILD_SPHINCS "yes" PARENT_SCOPE)
207207
set(BUILD_DILITHIUM "yes" PARENT_SCOPE)
208-
set(BUILD_EXT_KYBER "yes" PARENT_SCOPE)
208+
set(BUILD_EXT_MLKEM "yes" PARENT_SCOPE)
209209
set(BUILD_OQS_HELPER "yes" PARENT_SCOPE)
210210
endif()
211211
if(WOLFSSL_LMS OR WOLFSSL_USER_SETTINGS)
@@ -811,7 +811,7 @@ function(generate_lib_src_list LIB_SOURCES)
811811
list(APPEND LIB_SOURCES wolfcrypt/src/dilithium.c)
812812
endif()
813813

814-
if(BUILD_WC_KYBER)
814+
if(BUILD_WC_MLKEM)
815815
list(APPEND LIB_SOURCES wolfcrypt/src/wc_mlkem.c)
816816
list(APPEND LIB_SOURCES wolfcrypt/src/wc_mlkem_poly.c)
817817

@@ -820,7 +820,7 @@ function(generate_lib_src_list LIB_SOURCES)
820820
endif()
821821
endif()
822822

823-
if(BUILD_EXT_KYBER)
823+
if(BUILD_EXT_MLKEM)
824824
list(APPEND LIB_SOURCES wolfcrypt/src/ext_mlkem.c)
825825
endif()
826826

cmake/options.h.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,10 @@ extern "C" {
386386
#cmakedefine WOLFSSL_HAVE_LMS
387387
#undef WOLFSSL_WC_LMS
388388
#cmakedefine WOLFSSL_WC_LMS
389+
#undef WOLFSSL_LMS_SHA256_192
390+
#cmakedefine WOLFSSL_LMS_SHA256_192
391+
#undef WOLFSSL_NO_LMS_SHA256_256
392+
#cmakedefine WOLFSSL_NO_LMS_SHA256_256
389393
#undef WOLFSSL_HAVE_XMSS
390394
#cmakedefine WOLFSSL_HAVE_XMSS
391395
#undef WOLFSSL_WC_XMSS

0 commit comments

Comments
 (0)