Skip to content

Commit 2d9cdae

Browse files
authored
Merge pull request #175 from Frauschi/f-mlkem
Add ML-KEM support
2 parents d39ecdd + 98517c9 commit 2d9cdae

17 files changed

Lines changed: 3218 additions & 67 deletions

.github/workflows/clang-tidy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
- name: "NSS+TPM Build"
4444
configure_flags: "--enable-nss --enable-tpm"
4545
- name: "PKCS#11 V3.2 PQC Build"
46-
configure_flags: "--enable-pkcs11v32 --enable-mldsa"
46+
configure_flags: "--enable-pkcs11v32 --enable-mldsa --enable-mlkem"
4747

4848
steps:
4949
# Checkout wolfPKCS11

.github/workflows/cmake.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
-DWOLFPKCS11_AESKEYWRAP:BOOL=yes -DWOLFPKCS11_AESCTR:BOOL=yes -DWOLFPKCS11_AESCCM:BOOL=yes \
6363
-DWOLFPKCS11_AESECB:BOOL=yes -DWOLFPKCS11_AESCTS:BOOL=yes -DWOLFPKCS11_AESCMAC:BOOL=yes \
6464
-DWOLFPKCS11_PBKDF2:BOOL=yes -DWOLFPKCS11_SHA3:BOOL=yes -DWOLFPKCS11_PKCS11_V3_0:BOOL=yes \
65-
-DWOLFPKCS11_PKCS11_V3_2:BOOL=yes -DWOLFPKCS11_MLDSA:BOOL=yes \
65+
-DWOLFPKCS11_PKCS11_V3_2:BOOL=yes -DWOLFPKCS11_MLDSA:BOOL=yes -DWOLFPKCS11_MLKEM:BOOL=yes \
6666
-DCMAKE_MODULE_PATH="$GITHUB_WORKSPACE/install/${CMAKE_INSTALL_LIBDIR}" \
6767
..
6868
cmake --build .

.github/workflows/sanitizer-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
- name: "NSS+TPM Build"
2727
configure_flags: "--enable-nss --enable-tpm"
2828
- name: "PKCS#11 V3.2 PQC Build"
29-
configure_flags: "--enable-pkcs11v32 --enable-mldsa"
29+
configure_flags: "--enable-pkcs11v32 --enable-mldsa --enable-mlkem"
3030

3131
steps:
3232
#pull wolfPKCS11

.github/workflows/unit-test.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ jobs:
106106
uses: ./.github/workflows/build-workflow.yml
107107
with:
108108
config: --enable-mldsa
109+
mlkem:
110+
uses: ./.github/workflows/build-workflow.yml
111+
with:
112+
config: --enable-mlkem
109113
debug:
110114
uses: ./.github/workflows/build-workflow.yml
111115
with:

CMakeLists.txt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,12 +474,42 @@ endif()
474474

475475
if(WOLFPKCS11_MLDSA)
476476
if(NOT WOLFPKCS11_PKCS11_V3_2)
477-
message(FATAL_ERROR "ML-DSA requires PKCS#11 Version 3.2 support (enable WOLFPKCS11_PKCS11_V3_2)")
477+
message(STATUS "ML-DSA requires PKCS#11 v3.2 support — enabling WOLFPKCS11_PKCS11_V3_2 automatically")
478+
override_cache(WOLFPKCS11_PKCS11_V3_2 "yes")
479+
if(NOT WOLFPKCS11_PKCS11_V3_0)
480+
override_cache(WOLFPKCS11_PKCS11_V3_0 "yes")
481+
list(APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_PKCS11_V3_0")
482+
endif()
483+
list(APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_PKCS11_V3_2")
478484
endif()
479485
list(APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_MLDSA")
480486
endif()
481487

482488

489+
# ML-KEM
490+
add_option("WOLFPKCS11_MLKEM"
491+
"Enable wolfPKCS11 ML-KEM support (default: disabled)"
492+
"no" "yes;no"
493+
)
494+
495+
if(NOT WOLFPKCS11_SHA3)
496+
override_cache(WOLFPKCS11_MLKEM "no")
497+
endif()
498+
499+
if(WOLFPKCS11_MLKEM)
500+
if(NOT WOLFPKCS11_PKCS11_V3_2)
501+
message(STATUS "ML-KEM requires PKCS#11 v3.2 support — enabling WOLFPKCS11_PKCS11_V3_2 automatically")
502+
override_cache(WOLFPKCS11_PKCS11_V3_2 "yes")
503+
if(NOT WOLFPKCS11_PKCS11_V3_0)
504+
override_cache(WOLFPKCS11_PKCS11_V3_0 "yes")
505+
list(APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_PKCS11_V3_0")
506+
endif()
507+
list(APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_PKCS11_V3_2")
508+
endif()
509+
list(APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_MLKEM")
510+
endif()
511+
512+
483513
# If wolfpkcs11/options.h exists, delete it to avoid
484514
# a mixup with build/wolfpkcs11/options.h.
485515
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/wolfpkcs11/options.h")

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ As ML-DSA is a feature of PKCS#11 version 3.2, support for that is required,
6464
too. Hence, to enable all in wolfPKCS11, add `--enable-pkcs11v32 --enable-mldsa`
6565
during the configure step.
6666

67+
### Optional: PQC ML-KEM Support
68+
69+
To have ML-KEM support in wolfPKCS11, configure wolfSSL with ML-KEM (FIPS 203)
70+
support enabled, either by adding `--enable-mlkem` to `./configure` or by
71+
setting `WOLFPKCS11_MLKEM` to `yes` in CMake.
72+
73+
As ML-KEM is a feature of PKCS#11 version 3.2, support for that is required,
74+
too. Hence, to enable all in wolfPKCS11, add `--enable-pkcs11v32 --enable-mlkem`
75+
during the configure step.
76+
6777
### Build options and defines
6878

6979
#### Define WOLFPKCS11_TPM_STORE
@@ -207,7 +217,8 @@ cmake -DCMAKE_PREFIX_PATH=/path/to/wolfssl/install ..
207217
| `WOLFPKCS11_NSS` | `no` | NSS-specific modifications |
208218
| `WOLFPKCS11_PKCS11_V3_0` | `yes` | PKCS#11 v3.0 support |
209219
| `WOLFPKCS11_PKCS11_V3_2` | `no` | PKCS#11 v3.2 support |
210-
| `WOLFPKCS11_MLDSA` | `no`| ML-DSA support |
220+
| `WOLFPKCS11_MLDSA` | `no` | ML-DSA support |
221+
| `WOLFPKCS11_MLKEM` | `no` | ML-KEM support |
211222
| `WOLFPKCS11_EXAMPLES` | `yes` | Build examples |
212223
| `WOLFPKCS11_TESTS` | `yes` | Build and register tests |
213224
| `WOLFPKCS11_COVERAGE` | `no` | Code coverage support |

cmake/options.h.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ extern "C" {
9494
#cmakedefine WOLFSSL_SHA3
9595
#undef WOLFPKCS11_MLDSA
9696
#cmakedefine WOLFPKCS11_MLDSA
97+
#undef WOLFPKCS11_MLKEM
98+
#cmakedefine WOLFPKCS11_MLKEM
9799
#undef WOLFPKCS11_TPM
98100
#cmakedefine WOLFPKCS11_TPM
99101
#undef WOLFPKCS11_NSS

configure.ac

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,10 +533,39 @@ then
533533
if test "$ENABLED_PKCS11V3_2" = "no"; then
534534
ENABLED_PKCS11V3_2=yes
535535
AM_CFLAGS="$AM_CFLAGS -DWOLFPKCS11_PKCS11_V3_2"
536+
if test "$ENABLED_PKCS11V3_0" = "no"; then
537+
ENABLED_PKCS11V3_0=yes
538+
AM_CFLAGS="$AM_CFLAGS -DWOLFPKCS11_PKCS11_V3_0"
539+
fi
536540
fi
537541
AM_CFLAGS="$AM_CFLAGS -DWOLFPKCS11_MLDSA"
538542
fi
539543

544+
AC_ARG_ENABLE([mlkem],
545+
[AS_HELP_STRING([--enable-mlkem],[Enable ML-KEM (default: disabled)])],
546+
[ ENABLED_MLKEM=$enableval ],
547+
[ ENABLED_MLKEM=no ]
548+
)
549+
550+
if test "$ENABLED_SHA3" = "no"
551+
then
552+
echo "ML-KEM requires SHA-3 support (disabled), disabling ML-KEM"
553+
ENABLED_MLKEM=no
554+
fi
555+
556+
if test "$ENABLED_MLKEM" = "yes"
557+
then
558+
if test "$ENABLED_PKCS11V3_2" = "no"; then
559+
ENABLED_PKCS11V3_2=yes
560+
AM_CFLAGS="$AM_CFLAGS -DWOLFPKCS11_PKCS11_V3_2"
561+
if test "$ENABLED_PKCS11V3_0" = "no"; then
562+
ENABLED_PKCS11V3_0=yes
563+
AM_CFLAGS="$AM_CFLAGS -DWOLFPKCS11_PKCS11_V3_0"
564+
fi
565+
fi
566+
AM_CFLAGS="$AM_CFLAGS -DWOLFPKCS11_MLKEM"
567+
fi
568+
540569

541570
AM_CONDITIONAL([BUILD_STATIC],[test "x$enable_shared" = "xno"])
542571

@@ -725,6 +754,7 @@ echo " * DH: $ENABLED_DH"
725754
echo " * ECC: $ENABLED_ECC"
726755
echo " * HKDF: $ENABLED_HKDF"
727756
echo " * ML-DSA: $ENABLED_MLDSA"
757+
echo " * ML-KEM: $ENABLED_MLKEM"
728758
echo " * NSS modifications: $ENABLED_NSS"
729759
echo " * Default token path: $WOLFPKCS11_DEFAULT_TOKEN_PATH"
730760
echo " * PKCS#11 Version 3.0: $ENABLED_PKCS11V3_0"

0 commit comments

Comments
 (0)