@@ -509,6 +509,54 @@ if(WOLFPKCS11_MLKEM)
509509 list (APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_MLKEM" )
510510endif ()
511511
512+ # LMS/HSS (RFC 8554) verify + public-key import (default: disabled)
513+ add_option ("WOLFPKCS11_LMS"
514+ "Enable wolfPKCS11 LMS/HSS verification and public-key import (default: disabled)"
515+ "no" "yes;no"
516+ )
517+
518+ if (WOLFPKCS11_LMS AND NOT WOLFPKCS11_SHA256)
519+ message (STATUS "LMS/HSS requires SHA-256 support (disabled); disabling WOLFPKCS11_LMS" )
520+ override_cache (WOLFPKCS11_LMS "no" )
521+ endif ()
522+
523+ if (WOLFPKCS11_LMS)
524+ if (NOT WOLFPKCS11_PKCS11_V3_2)
525+ message (STATUS "LMS/HSS requires PKCS#11 v3.2 support — enabling WOLFPKCS11_PKCS11_V3_2 automatically" )
526+ override_cache (WOLFPKCS11_PKCS11_V3_2 "yes" )
527+ if (NOT WOLFPKCS11_PKCS11_V3_0)
528+ override_cache (WOLFPKCS11_PKCS11_V3_0 "yes" )
529+ list (APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_PKCS11_V3_0" )
530+ endif ()
531+ list (APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_PKCS11_V3_2" )
532+ endif ()
533+ list (APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_LMS" )
534+ endif ()
535+
536+ # XMSS/XMSS^MT (RFC 8391) verify + public-key import (default: disabled)
537+ add_option ("WOLFPKCS11_XMSS"
538+ "Enable wolfPKCS11 XMSS/XMSS^MT verification and public-key import (default: disabled)"
539+ "no" "yes;no"
540+ )
541+
542+ if (WOLFPKCS11_XMSS AND NOT WOLFPKCS11_SHA256)
543+ message (STATUS "XMSS requires SHA-256 support (disabled); disabling WOLFPKCS11_XMSS" )
544+ override_cache (WOLFPKCS11_XMSS "no" )
545+ endif ()
546+
547+ if (WOLFPKCS11_XMSS)
548+ if (NOT WOLFPKCS11_PKCS11_V3_2)
549+ message (STATUS "XMSS requires PKCS#11 v3.2 support — enabling WOLFPKCS11_PKCS11_V3_2 automatically" )
550+ override_cache (WOLFPKCS11_PKCS11_V3_2 "yes" )
551+ if (NOT WOLFPKCS11_PKCS11_V3_0)
552+ override_cache (WOLFPKCS11_PKCS11_V3_0 "yes" )
553+ list (APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_PKCS11_V3_0" )
554+ endif ()
555+ list (APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_PKCS11_V3_2" )
556+ endif ()
557+ list (APPEND WOLFPKCS11_DEFINITIONS "-DWOLFPKCS11_XMSS" )
558+ endif ()
559+
512560
513561# If wolfpkcs11/options.h exists, delete it to avoid
514562# a mixup with build/wolfpkcs11/options.h.
@@ -728,6 +776,15 @@ if(WOLFPKCS11_TESTS)
728776 add_wpkcs11_test (${test_target}
729777 ${CMAKE_CURRENT_SOURCE_DIR } /tests/${test_target}.c )
730778 endforeach ()
779+
780+ # HBS (LMS/HSS, XMSS/XMSS^MT) public-key persistence test. Only built when
781+ # the feature is enabled; the test exits 77 (skip) when no token store is
782+ # available, so treat that as a skip rather than a failure.
783+ if (WOLFPKCS11_LMS OR WOLFPKCS11_XMSS)
784+ add_wpkcs11_test (hbs_persistence_test
785+ ${CMAKE_CURRENT_SOURCE_DIR } /tests/hbs_persistence_test.c )
786+ set_tests_properties (hbs_persistence_test PROPERTIES SKIP_RETURN_CODE 77)
787+ endif ()
731788endif ()
732789
733790if (WOLFPKCS11_EXAMPLES)
0 commit comments