]> git.feebdaed.xyz Git - 0xmirror/liboqs.git/commitdiff
Integrate SLH-DSA-C Library (#2175)
authorh2parson <91481147+h2parson@users.noreply.github.com>
Wed, 13 Aug 2025 19:41:47 +0000 (15:41 -0400)
committerGitHub <noreply@github.com>
Wed, 13 Aug 2025 19:41:47 +0000 (15:41 -0400)
* copy from slhdsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* integrate with copy from upstream

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* explicitly list slhdsa files to include and push generated code

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* format code script

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add to requirements.in

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix code conventions

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* copy from upstream changes

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add chdir to copy from slh dsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* modify template

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* generate requirements.txt

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* modify requirments in workflows

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* format

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* a

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* sort filenames in cmake file generation for slh dsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add newline at end of header file

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add whitespace and fix alg info tests

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* update docs with copy from upstream

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add whitespace to src files

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* initialize ctx in slh

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* explicitly set little endian for windows x86

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* temporarily disable ctx signing for slh tests

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* disable kats until hashes available for slh dsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix issues in test sig mem

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* temporarily add namespaces so that slh dsa will not break test namespace

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* updates

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* formatted file

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* align jinja template to astyle

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* change addrnd size

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* copy from slhdsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* integrate with copy from upstream

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* explicitly list slhdsa files to include and push generated code

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* format code script

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add to requirements.in

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix code conventions

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* copy from upstream changes

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add chdir to copy from slh dsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* modify template

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* generate requirements.txt

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* modify requirments in workflows

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* format

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* a

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* sort filenames in cmake file generation for slh dsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add newline at end of header file

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add whitespace and fix alg info tests

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* update docs with copy from upstream

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* add whitespace to src files

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* initialize ctx in slh

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* explicitly set little endian for windows x86

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* temporarily disable ctx signing for slh tests

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* disable kats until hashes available for slh dsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix issues in test sig mem

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* temporarily add namespaces so that slh dsa will not break test namespace

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* updates

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* formatted file

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* align jinja template to astyle

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* change addrnd size

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix std algs filtering issue

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* modifying windows amd toolchain file to fix endianness issue

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* disable leak testing on slh dsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* disable slh dsa for arm emulated linux and zephyr tests

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix zephyr test skip logic

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix upstream issue with prehash naming and add variant specific nist levels

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* automatically update slh dsa yml file

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* get slh dsa md file generation working

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix naming in slh wrapper files

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* minor changes from review

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* separate slh dsa jobs from stfl sigs

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* separate slhdsa from sig stfl tests on mac and windows

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* fix macos yml format

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* modify zephyr timeout

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* re-enable some tests for slh dsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* separate leak tests

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* allow algorithm family level enablement and reconfigure slhdsa CI jobs

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* move slh dsa address sanitizer to extended tests and extend time limit to 90 minutes

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
* remove package deb from CI job, remove auto gen kat sig for slhdsa, add prime ctx step for sig testing slhdsa

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
---------

Signed-off-by: h2parson <h2parson@uwaterloo.ca>
216 files changed:
.CMake/alg_support.cmake
.CMake/toolchain_windows_amd64.cmake
.CMake/toolchain_windows_x86.cmake
.github/workflows/extended.yml
.github/workflows/linux.yml
.github/workflows/macos.yml
.github/workflows/requirements.in
.github/workflows/requirements.txt
.github/workflows/windows.yml
.gitignore
CMakeLists.txt
README.md
docs/algorithms/sig/slh_dsa.md [new file with mode: 0644]
docs/algorithms/sig/slh_dsa.yml [new file with mode: 0644]
docs/cbom.json
scripts/copy_from_upstream/copy_from_slh_dsa_c.py [new file with mode: 0644]
scripts/copy_from_upstream/copy_from_upstream.py
scripts/copy_from_upstream/requirements.in
scripts/copy_from_upstream/requirements.txt
scripts/copy_from_upstream/src/sig/sig.h/algs_length.fragment
src/CMakeLists.txt
src/oqsconfig.h.cmake
src/sig/sig.c
src/sig/sig.h
src/sig/slh_dsa/CMakeLists.txt [new file with mode: 0644]
src/sig/slh_dsa/sig_slh_dsa.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/cbmc.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/integration/liboqs/META.yml [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/plat_local.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/sha2_256.c [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/sha2_512.c [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/sha2_api.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/sha3_api.c [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/sha3_api.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/sha3_f1600.c [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_adrs.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_dsa.c [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_dsa.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_param.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_prehash.c [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_prehash.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_sha2.c [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_shake.c [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_sys.h [new file with mode: 0644]
src/sig/slh_dsa/slh_dsa_c/slh_var.h [new file with mode: 0644]
src/sig/slh_dsa/templates/slh_dsa_alg_support_template.jinja [new file with mode: 0644]
src/sig/slh_dsa/templates/slh_dsa_cmake_template.jinja [new file with mode: 0644]
src/sig/slh_dsa/templates/slh_dsa_docs_yml_template.jinja [new file with mode: 0644]
src/sig/slh_dsa/templates/slh_dsa_header_template.jinja [new file with mode: 0644]
src/sig/slh_dsa/templates/slh_dsa_oqsconfig_template.jinja [new file with mode: 0644]
src/sig/slh_dsa/templates/slh_dsa_sig_c_template.jinja [new file with mode: 0644]
src/sig/slh_dsa/templates/slh_dsa_sig_h_template.jinja [new file with mode: 0644]
src/sig/slh_dsa/templates/slh_dsa_src_template.jinja [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192s.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256f.c [new file with mode: 0644]
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256s.c [new file with mode: 0644]
tests/test_binary.py
tests/test_kat.py
tests/test_kat_all.py
tests/test_leaks.py
tests/test_sig.c
zephyr/samples/Signatures/sample.yaml
zephyr/samples/Signatures/src/main.c

index 06fcb095efc9a3a02f86e32e49d89efe2f6d3aa1..51ae5eaafa51b3ffb5a41b1cd97b18107f37cba0 100644 (file)
@@ -17,7 +17,7 @@ function(filter_algs alglist)
           # Case 1, family name
          foreach (_alg ${ARGV0})
              string(TOUPPER ${_alg} upalg)
-            if("OQS_ENABLE_${upalg}" MATCHES "^${_var}")
+            if("OQS_ENABLE_${upalg}" MATCHES "^${_var}" OR  "^${_var}" MATCHES "OQS_ENABLE_${_alg}")
                  set(${_var} ON PARENT_SCOPE)
              endif()
           endforeach()
@@ -223,6 +223,165 @@ cmake_dependent_option(OQS_ENABLE_SIG_snova_SNOVA_24_5_5 "" ON "OQS_ENABLE_SIG_S
 cmake_dependent_option(OQS_ENABLE_SIG_snova_SNOVA_60_10_4 "" ON "OQS_ENABLE_SIG_SNOVA" OFF)
 cmake_dependent_option(OQS_ENABLE_SIG_snova_SNOVA_29_6_5 "" ON "OQS_ENABLE_SIG_SNOVA" OFF)
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ENABLE_BY_ALG_END
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ADD_ENABLE_BY_ALG_START
+option(OQS_ENABLE_SIG_SLH_DSA "Enable slh_dsa algorithm family" ON)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_pure_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256s "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256f "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ADD_ENABLE_BY_ALG_END
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_START
 if ((OQS_LIBJADE_BUILD STREQUAL "ON"))
index 60a0dca90ee454e56ab4a1f3f890cb8e701c3747..e1e4328e4fd05482c55f28032249d300045fcfa0 100644 (file)
@@ -10,3 +10,6 @@ set(CMAKE_GENERATOR_PLATFORM
     x64
     CACHE STRING "Platform" FORCE
 )
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__ORDER_LITTLE_ENDIAN__=1234 -D__ORDER_BIG_ENDIAN__=4321 -D__BYTE_ORDER__=1234")
+message(STATUS "Setting little endianness explicity for windows amd 64")
index 3279e39770012fb71723289ad870aa595c4acc1d..cf658c0325cc4f81bc7c1766ba2af8f1ddc2470d 100644 (file)
@@ -10,3 +10,6 @@ set(CMAKE_GENERATOR_PLATFORM
     Win32
     CACHE STRING "Platform" FORCE
 )
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__ORDER_LITTLE_ENDIAN__=1234 -D__ORDER_BIG_ENDIAN__=4321 -D__BYTE_ORDER__=1234")
+message(STATUS "Setting little endianness explicity for windows x86")
index 639145b963f38435196b8fb4d0c312e1a255b85d..0b826c946cc64ba4cdda8b2a5bdf8ca3a4e0280b 100644 (file)
@@ -96,3 +96,51 @@ jobs:
       - name: Run tests
         timeout-minutes: 360
         run: mkdir -p tmp && python3 -m pytest --verbose ${{ matrix.PYTEST_ARGS }}
+
+  slhdsa-leak-tests:
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - name: arm64-slhdsa
+            runner: ubuntu-24.04-arm
+            container: openquantumsafe/ci-ubuntu-latest:latest
+            PYTEST_ARGS: --maxprocesses=10 --ignore=tests/test_kat_all.py
+            CMAKE_ARGS: -DOQS_MINIMAL_BUILD=SIG_slh_dsa
+          - name: alpine-slhdsa
+            runner: ubuntu-latest
+            container: openquantumsafe/ci-alpine-amd64:latest
+            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_MINIMAL_BUILD=SIG_slh_dsa
+            PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
+    runs-on: ${{ matrix.runner }}
+    container:
+      image: ${{ matrix.container }}
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4
+      - name: Configure
+        run: mkdir build && cd build && cmake -GNinja ${{ matrix.CMAKE_ARGS }} .. && cmake -LA -N ..
+      - name: Build
+        run: ninja
+        working-directory: build
+      - name: Run tests
+        timeout-minutes: 90
+        run: mkdir -p tmp && SLH_DSA_LEAK_TEST=1 python3 -m pytest --verbose --numprocesses=auto tests/test_leaks.py::test_slhdsa_leak ${{ matrix.PYTEST_ARGS }}
+
+  address-sanitizer-slhdsa:
+    strategy:
+      fail-fast: false
+    runs-on: ubuntu-latest
+    container:
+      image: openquantumsafe/ci-ubuntu-latest:latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4
+      - name: Configure
+        run: mkdir build && cd build && cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=Address -DOQS_MINIMAL_BUILD=SIG_slh_dsa .. && cmake -LA -N ..
+      - name: Build
+        run: ninja
+        working-directory: build
+      - name: Run tests
+        timeout-minutes: 90
+        run: mkdir -p tmp && python3 -m pytest --verbose --ignore=tests/test_code_conventions.py --numprocesses=auto --ignore=tests/test_distbuild.py --ignore=tests/test_leaks.py --ignore=tests/test_kat_all.py --maxprocesses=10
index 1cb5f0d31c509ce6fc9f153509b7b87acd7c7c18..9d71fb44db23735af31f5b5cdf12290880accfee 100644 (file)
@@ -16,11 +16,21 @@ jobs:
             runner: ubuntu-24.04-arm
             container: openquantumsafe/ci-ubuntu-latest:latest
             PYTEST_ARGS: --maxprocesses=10 --ignore=tests/test_kat_all.py
-            CMAKE_ARGS: -DOQS_ENABLE_SIG_STFL_LMS=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON
+            CMAKE_ARGS: -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_ENABLE_SIG_STFL_LMS=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON
+          - name: arm64-slhdsa
+            runner: ubuntu-24.04-arm
+            container: openquantumsafe/ci-ubuntu-latest:latest
+            PYTEST_ARGS: --maxprocesses=10 --ignore=tests/test_kat_all.py
+            CMAKE_ARGS: -DOQS_MINIMAL_BUILD=SIG_slh_dsa
           - name: alpine
             runner: ubuntu-latest
             container: openquantumsafe/ci-alpine-amd64:latest
-            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
+          - name: alpine-slhdsa
+            runner: ubuntu-latest
+            container: openquantumsafe/ci-alpine-amd64:latest
+            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_MINIMAL_BUILD=SIG_slh_dsa
             PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
           - name: alpine-libjade
             runner: ubuntu-latest
@@ -30,17 +40,27 @@ jobs:
           - name: alpine-no-stfl-key-sig-gen
             runner: ubuntu-latest
             container: openquantumsafe/ci-alpine-amd64:latest
-            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=OFF -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=OFF -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
             PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
           - name: alpine-openssl-all
             runner: ubuntu-latest
             container: openquantumsafe/ci-alpine-amd64:latest
-            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_USE_AES_OPENSSL=ON -DOQS_USE_SHA2_OPENSSL=ON -DOQS_USE_SHA3_OPENSSL=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_USE_AES_OPENSSL=ON -DOQS_USE_SHA2_OPENSSL=ON -DOQS_USE_SHA3_OPENSSL=ON -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
             PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
           - name: alpine-noopenssl
             runner: ubuntu-latest
             container: openquantumsafe/ci-alpine-amd64:latest
-            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=OFF -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
+          - name: alpine-openssl-all-slhdsa
+            runner: ubuntu-latest
+            container: openquantumsafe/ci-alpine-amd64:latest
+            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=ON -DBUILD_SHARED_LIBS=ON -DOQS_USE_AES_OPENSSL=ON -DOQS_USE_SHA2_OPENSSL=ON -DOQS_USE_SHA3_OPENSSL=ON -DOQS_MINIMAL_BUILD=SIG_slh_dsa
+            PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
+          - name: alpine-noopenssl-slhdsa
+            runner: ubuntu-latest
+            container: openquantumsafe/ci-alpine-amd64:latest
+            CMAKE_ARGS: -DOQS_STRICT_WARNINGS=ON -DOQS_USE_OPENSSL=OFF -DOQS_MINIMAL_BUILD=SIG_slh_dsa
             PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
           - name: noble-nistr4-openssl
             runner: ubuntu-latest
@@ -100,17 +120,17 @@ jobs:
           - name: address-sanitizer
             runner: ubuntu-latest
             container: openquantumsafe/ci-ubuntu-latest:latest
-            CMAKE_ARGS: -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=Address -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=Address -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
             PYTEST_ARGS: --ignore=tests/test_distbuild.py --ignore=tests/test_leaks.py --ignore=tests/test_kat_all.py --maxprocesses=10
           - name: address-sanitizer-no-stfl-key-sig-gen
             runner: ubuntu-latest
             container: openquantumsafe/ci-ubuntu-latest:latest
-            CMAKE_ARGS: -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=Address -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=OFF -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=Address -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=OFF -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
             PYTEST_ARGS: --ignore=tests/test_distbuild.py --ignore=tests/test_leaks.py --ignore=tests/test_kat_all.py --maxprocesses=10
           - name: address-sanitizer-libjade
             runner: ubuntu-latest
             container: openquantumsafe/ci-ubuntu-latest:latest
-            CMAKE_ARGS: -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=Address -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD="${{ vars.LIBJADE_ALG_LIST }}"
+            CMAKE_ARGS: -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=Address -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD="${{ vars.LIBJADE_ALG_LIST }}" -DOQS_ENABLE_SIG_SLH_DSA=OFF
             PYTEST_ARGS: --ignore=tests/test_distbuild.py --ignore=tests/test_leaks.py --ignore=tests/test_kat_all.py --maxprocesses=10
           - name: noble-no-sha3-avx512vl
             runner: ubuntu-latest
@@ -163,11 +183,11 @@ jobs:
         include:
           - name: armhf
             ARCH: armhf
-            CMAKE_ARGS: -DOQS_ENABLE_SIG_SPHINCS=OFF -DOQS_USE_OPENSSL=OFF -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=generic -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DOQS_ENABLE_SIG_SPHINCS=OFF -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_USE_OPENSSL=OFF -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=generic -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
             PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
           - name: armhf-no-stfl-key-sig-gen
             ARCH: armhf
-            CMAKE_ARGS: -DOQS_ENABLE_SIG_SPHINCS=OFF -DOQS_USE_OPENSSL=OFF -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=generic -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=OFF -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DOQS_ENABLE_SIG_SPHINCS=OFF -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_USE_OPENSSL=OFF -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=generic -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=OFF -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
             PYTEST_ARGS: --ignore=tests/test_alg_info.py --ignore=tests/test_kat_all.py
           # no longer supporting armel
           # - name: armel
index 566283e6ecf7a63720887c390b9c39a6034aa9e3..26fc2d5b9e8e09b4669edef2882e661c0ee82c93 100644 (file)
@@ -17,7 +17,7 @@ jobs:
           - macos-14
           - macos-15
         CMAKE_ARGS:
-          - -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+          - -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
           - -DCMAKE_C_COMPILER=gcc-14
           - -DOQS_USE_OPENSSL=OFF
           - -DBUILD_SHARED_LIBS=ON -DOQS_DIST_BUILD=OFF
@@ -35,7 +35,7 @@ jobs:
             libjade-build: -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD="${{ vars.LIBJADE_ALG_LIST }}"
           # No point in testing stateful sigs with minimal libjade build
           - libjade-build: -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD="${{ vars.LIBJADE_ALG_LIST }}"
-            CMAKE_ARGS: -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
+            CMAKE_ARGS: -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_ENABLE_SIG_STFL_LMS=ON
           # Failing configuration on Github actions; see https://github.com/open-quantum-safe/liboqs/pull/2148
           - os: macos-15
             CMAKE_ARGS: -DCMAKE_C_COMPILER=gcc-14
index a37e127506d5b3d29640741a9901d27ff148d618..4b95d2831044d92cca3824d1b0c890605df404c4 100644 (file)
@@ -6,3 +6,4 @@ pluggy==1.4.0
 pytest==8.1.1
 pytest-xdist==3.5.0
 pyyaml==6.0.1
+requests==2.32.4
index f43fcd6eaa562367733a79eb674ed799b8cf5edd..dfebbbe5445491e5f18a390d776aec820bd85a03 100644 (file)
 # This file is autogenerated by pip-compile with Python 3.12
 # by the following command:
 #
-#    pip-compile --generate-hashes --output-file=requirements_new.txt requirements.txt
+#    pip-compile --generate-hashes --output-file=requirements.txt requirements.in
 #
+certifi==2025.6.15 \
+    --hash=sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057 \
+    --hash=sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b
+    # via requests
+charset-normalizer==3.4.2 \
+    --hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \
+    --hash=sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45 \
+    --hash=sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7 \
+    --hash=sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0 \
+    --hash=sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7 \
+    --hash=sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d \
+    --hash=sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d \
+    --hash=sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0 \
+    --hash=sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184 \
+    --hash=sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db \
+    --hash=sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b \
+    --hash=sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64 \
+    --hash=sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b \
+    --hash=sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8 \
+    --hash=sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff \
+    --hash=sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344 \
+    --hash=sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58 \
+    --hash=sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e \
+    --hash=sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471 \
+    --hash=sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148 \
+    --hash=sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a \
+    --hash=sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836 \
+    --hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e \
+    --hash=sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63 \
+    --hash=sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c \
+    --hash=sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1 \
+    --hash=sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01 \
+    --hash=sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366 \
+    --hash=sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58 \
+    --hash=sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5 \
+    --hash=sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c \
+    --hash=sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2 \
+    --hash=sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a \
+    --hash=sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597 \
+    --hash=sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b \
+    --hash=sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5 \
+    --hash=sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb \
+    --hash=sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f \
+    --hash=sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0 \
+    --hash=sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941 \
+    --hash=sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0 \
+    --hash=sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86 \
+    --hash=sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7 \
+    --hash=sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7 \
+    --hash=sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455 \
+    --hash=sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6 \
+    --hash=sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4 \
+    --hash=sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0 \
+    --hash=sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3 \
+    --hash=sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1 \
+    --hash=sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6 \
+    --hash=sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981 \
+    --hash=sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c \
+    --hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 \
+    --hash=sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645 \
+    --hash=sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7 \
+    --hash=sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12 \
+    --hash=sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa \
+    --hash=sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd \
+    --hash=sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef \
+    --hash=sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f \
+    --hash=sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2 \
+    --hash=sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d \
+    --hash=sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5 \
+    --hash=sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02 \
+    --hash=sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3 \
+    --hash=sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd \
+    --hash=sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e \
+    --hash=sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214 \
+    --hash=sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd \
+    --hash=sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a \
+    --hash=sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c \
+    --hash=sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681 \
+    --hash=sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba \
+    --hash=sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f \
+    --hash=sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a \
+    --hash=sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28 \
+    --hash=sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691 \
+    --hash=sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82 \
+    --hash=sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a \
+    --hash=sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027 \
+    --hash=sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7 \
+    --hash=sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518 \
+    --hash=sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf \
+    --hash=sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b \
+    --hash=sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9 \
+    --hash=sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544 \
+    --hash=sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da \
+    --hash=sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509 \
+    --hash=sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f \
+    --hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a \
+    --hash=sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f
+    # via requests
 colorama==0.4.6 \
     --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
     --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
-    # via -r requirements.txt
+    # via -r requirements.in
 execnet==2.1.1 \
     --hash=sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc \
     --hash=sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3
     # via
-    #   -r requirements.txt
+    #   -r requirements.in
     #   pytest-xdist
+idna==3.10 \
+    --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
+    --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
+    # via requests
 iniconfig==2.0.0 \
     --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
     --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374
     # via
-    #   -r requirements.txt
+    #   -r requirements.in
     #   pytest
 packaging==24.0 \
     --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \
     --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9
     # via
-    #   -r requirements.txt
+    #   -r requirements.in
     #   pytest
 pluggy==1.4.0 \
     --hash=sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981 \
     --hash=sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be
     # via
-    #   -r requirements.txt
+    #   -r requirements.in
     #   pytest
 pytest==8.1.1 \
     --hash=sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7 \
     --hash=sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044
     # via
-    #   -r requirements.txt
+    #   -r requirements.in
     #   pytest-xdist
 pytest-xdist==3.5.0 \
     --hash=sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a \
     --hash=sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24
-    # via -r requirements.txt
+    # via -r requirements.in
 pyyaml==6.0.1 \
     --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \
     --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \
@@ -94,4 +196,12 @@ pyyaml==6.0.1 \
     --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \
     --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \
     --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f
-    # via -r requirements.txt
+    # via -r requirements.in
+requests==2.32.4 \
+    --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \
+    --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422
+    # via -r requirements.in
+urllib3==2.5.0 \
+    --hash=sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760 \
+    --hash=sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc
+    # via requests
index b9fda30cb4d5b042d5dfc7b9d3cd296de202b663..36d74ca612ed3961a5f90649e08bc97e370394be 100644 (file)
@@ -16,10 +16,23 @@ jobs:
     steps:
       - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # pin@v3
       - name: Generate Project
-        run: cmake -B build --toolchain .CMake/toolchain_windows_arm64.cmake -DOQS_ENABLE_SIG_STFL_LMS=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=${{ matrix.stfl_opt }} .
+        run: cmake -B build --toolchain .CMake/toolchain_windows_arm64.cmake -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_ENABLE_SIG_STFL_LMS=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=${{ matrix.stfl_opt }} .
       - name: Build Project
         run: cmake --build build
 
+  windows-arm64-slhdsa:
+    strategy:
+      matrix:
+        runner: [windows-2022, windows-2025]
+        stfl_opt: [ON, OFF]
+    runs-on: ${{ matrix.runner }}
+    steps:
+      - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # pin@v3
+      - name: Generate Project
+        run: cmake -B build --toolchain .CMake/toolchain_windows_arm64.cmake -DOQS_MINIMAL_BUILD=SIG_slh_dsa .
+      - name: Build Project  
+        run: cmake --build build
+
   windows-x86:
     strategy:
       fail-fast: false
@@ -36,7 +49,31 @@ jobs:
           python-version: '3.12'
       - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # pin@v3
       - name: Generate Project
-        run: cmake -B build --toolchain ${{ matrix.toolchain }} -DOQS_ENABLE_SIG_STFL_LMS=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=${{ matrix.stfl_opt }} .
+        run: cmake -B build --toolchain ${{ matrix.toolchain }} -DOQS_ENABLE_SIG_SLH_DSA=OFF -DOQS_ENABLE_SIG_STFL_LMS=ON -DOQS_ENABLE_SIG_STFL_XMSS=ON -DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=${{ matrix.stfl_opt }} .
+      - name: Build Project
+        run: cmake --build build
+      - name: Test dependencies
+        run: pip.exe install --require-hashes -r .github\workflows\requirements.txt
+      - name: Run tests
+        run: |
+          python -m pytest --numprocesses=auto -vv --maxfail=10 --ignore=tests/test_code_conventions.py --ignore=tests/test_kat_all.py --junitxml=build\test-results\pytest\test-results.xml
+
+  windows-x86-slhdsa:
+    strategy:
+      fail-fast: false
+      matrix:
+        runner: [windows-2022, windows-2025]
+        toolchain: [.CMake/toolchain_windows_x86.cmake, .CMake/toolchain_windows_amd64.cmake]
+        stfl_opt: [ON, OFF]
+    runs-on: ${{ matrix.runner }}
+    steps:
+      - name: Install Python
+        uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5
+        with:
+          python-version: '3.12'
+      - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # pin@v3
+      - name: Generate Project
+        run: cmake -B build --toolchain ${{ matrix.toolchain }} -DOQS_MINIMAL_BUILD=SIG_slh_dsa .
       - name: Build Project
         run: cmake --build build
       - name: Test dependencies
index 52d6be309a1de1b88f92556a0316a4ef4ac89dc2..c8faac9f0fa38497fbb5951370b3f80be3cbc7ce 100644 (file)
@@ -39,4 +39,3 @@ compile_commands.json
 
 # Generated by Nix flake
 result/
-
index 7cbd214de9fb57d2cd96ddbc6bc2c89b4d17a2de..65fc2b49e507fe3944089f9c9ab6f14a3b10497a 100644 (file)
@@ -271,6 +271,9 @@ if(OQS_ENABLE_SIG_SNOVA)
     set(PUBLIC_HEADERS ${PUBLIC_HEADERS} ${PROJECT_SOURCE_DIR}/src/sig/snova/sig_snova.h)
 endif()
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_INCLUDE_HEADERS_END
+if(OQS_ENABLE_SIG_SLH_DSA)
+    set(PUBLIC_HEADERS ${PUBLIC_HEADERS} ${PROJECT_SOURCE_DIR}/src/sig/slh_dsa/sig_slh_dsa.h)
+endif()
 if(OQS_ENABLE_SIG_STFL_XMSS)
     set(PUBLIC_HEADERS ${PUBLIC_HEADERS} ${PROJECT_SOURCE_DIR}/src/sig_stfl/xmss/sig_stfl_xmss.h)
 endif()
index a94b563d57757b526c4f34c594cfdefabab5d228..7004c451c80590e101a5d0177cbe9984b37e8a33 100644 (file)
--- a/README.md
+++ b/README.md
@@ -73,6 +73,7 @@ All names other than `ML-KEM` and `ML-DSA` are subject to change. `liboqs` makes
 - **Falcon**: Falcon-512, Falcon-1024, Falcon-padded-512, Falcon-padded-1024
 - **MAYO**: MAYO-1, MAYO-2, MAYO-3, MAYO-5†
 - **ML-DSA**: ML-DSA-44, ML-DSA-65, ML-DSA-87
+- **SLH-DSA**: SLH\_DSA\_PURE\_SHA2\_128S†, SLH\_DSA\_PURE\_SHA2\_128F†, SLH\_DSA\_PURE\_SHA2\_192S†, SLH\_DSA\_PURE\_SHA2\_192F†, SLH\_DSA\_PURE\_SHA2\_256S†, SLH\_DSA\_PURE\_SHA2\_256F†, SLH\_DSA\_PURE\_SHAKE\_128S†, SLH\_DSA\_PURE\_SHAKE\_128F†, SLH\_DSA\_PURE\_SHAKE\_192S†, SLH\_DSA\_PURE\_SHAKE\_192F†, SLH\_DSA\_PURE\_SHAKE\_256S†, SLH\_DSA\_PURE\_SHAKE\_256F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_256F†
 - **SNOVA**: SNOVA\_24\_5\_4, SNOVA\_24\_5\_4\_SHAKE, SNOVA\_24\_5\_4\_esk, SNOVA\_24\_5\_4\_SHAKE\_esk, SNOVA\_37\_17\_2†, SNOVA\_25\_8\_3, SNOVA\_56\_25\_2†, SNOVA\_49\_11\_3†, SNOVA\_37\_8\_4†, SNOVA\_24\_5\_5†, SNOVA\_60\_10\_4†, SNOVA\_29\_6\_5†
 - **SPHINCS+-SHA2**: SPHINCS+-SHA2-128f-simple, SPHINCS+-SHA2-128s-simple, SPHINCS+-SHA2-192f-simple, SPHINCS+-SHA2-192s-simple, SPHINCS+-SHA2-256f-simple, SPHINCS+-SHA2-256s-simple
 - **SPHINCS+-SHAKE**: SPHINCS+-SHAKE-128f-simple, SPHINCS+-SHAKE-128s-simple, SPHINCS+-SHAKE-192f-simple, SPHINCS+-SHAKE-192s-simple, SPHINCS+-SHAKE-256f-simple, SPHINCS+-SHAKE-256s-simple
diff --git a/docs/algorithms/sig/slh_dsa.md b/docs/algorithms/sig/slh_dsa.md
new file mode 100644 (file)
index 0000000..d31d035
--- /dev/null
@@ -0,0 +1,1427 @@
+# SLH-DSA
+
+- **Algorithm type**: Digital signature scheme.
+- **Main cryptographic assumption**: hash-based signatures.
+- **Principal submitters**: Andreas Hülsing.
+- **Auxiliary submitters**: Daniel J. Bernstein, Christoph Dobraunig, Maria Eichlseder, Scott Fluhrer, Stefan-Lukas Gazdag, Panos Kampanakis, Stefan Kolbl, Tanja Lange, Martin M Lauridsen, Florian Mendel, Ruben Niederhagen, Christian Rechberger, Joost Rijneveld, Peter Schwabe, Jean-Philippe Aumasson, Bas Westerbaan, Ward Beullens.
+- **Authors' website**: https://csrc.nist.gov/pubs/fips/205/final
+- **Specification version**: SLH-DSA.
+- **Primary Source**<a name="primary-source"></a>:
+  - **Source**: https://github.com/pq-code-package/slhdsa-c/commit/a0fc1ff253930060d0246aebca06c2538eb92b88
+  - **Implementation license (SPDX-Identifier)**: MIT or ISC or Apache 2.0
+
+
+## Parameter set summary
+
+|                 Parameter set                  | Parameter set alias   | Security model   |   Claimed NIST Level |   Public key size (bytes) |   Secret key size (bytes) |   Signature size (bytes) |
+|:----------------------------------------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|
+|           SLH\_DSA\_PURE\_SHA2\_128S           | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|           SLH\_DSA\_PURE\_SHA2\_128F           | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|           SLH\_DSA\_PURE\_SHA2\_192S           | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|           SLH\_DSA\_PURE\_SHA2\_192F           | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|           SLH\_DSA\_PURE\_SHA2\_256S           | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|           SLH\_DSA\_PURE\_SHA2\_256F           | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|          SLH\_DSA\_PURE\_SHAKE\_128S           | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|          SLH\_DSA\_PURE\_SHAKE\_128F           | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|          SLH\_DSA\_PURE\_SHAKE\_192S           | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|          SLH\_DSA\_PURE\_SHAKE\_192F           | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|          SLH\_DSA\_PURE\_SHAKE\_256S           | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|          SLH\_DSA\_PURE\_SHAKE\_256F           | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|    SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|    SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|    SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|    SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_128S  | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_128S  | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|    SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|    SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|    SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|    SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|    SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|    SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|    SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|    SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_128F  | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_128F  | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|    SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|    SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|    SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|    SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|    SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|    SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|    SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|    SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_192S  | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_192S  | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|    SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|    SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|    SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|    SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|    SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|    SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|    SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|    SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_192F  | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_192F  | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|    SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|    SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|    SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|    SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|    SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|    SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|    SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|    SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_256S  | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_256S  | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|    SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|    SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|    SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|    SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|    SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|    SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|    SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|    SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_256F  | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_256F  | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|    SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|    SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|    SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|    SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_128S | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_128S | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_128S    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_128S   | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_128S   | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                     7856 |
+|   SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_128F | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_128F | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_128F    | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_128F   | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_128F   | NA                    | EUF-CMA          |                    1 |                        32 |                        64 |                    17088 |
+|   SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_192S | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_192S | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_192S    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_192S   | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_192S   | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    16224 |
+|   SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_192F | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_192F | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_192F    | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_192F   | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_192F   | NA                    | EUF-CMA          |                    3 |                        48 |                        96 |                    35664 |
+|   SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_256S | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_256S | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_256S    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_256S   | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_256S   | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    29792 |
+|   SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+| SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_256F | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+| SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_256F | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_256F    | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_256F   | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+|   SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_256F   | NA                    | EUF-CMA          |                    5 |                        64 |                       128 |                    49856 |
+
+## SLH\_DSA\_PURE\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?‡   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:----------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                  |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+ â€¡For an explanation of what this denotes, consult the [Explanation of Terms](#explanation-of-terms) section at the end of this file.
+
+## SLH\_DSA\_PURE\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_PURE\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_128S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_128F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_192S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_192F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_256S implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_256F implementation characteristics
+
+|       Implementation source       | Identifier in upstream   | Supported architecture(s)   | Supported operating system(s)   | CPU extension(s) used   | No branching-on-secrets claimed?   | No branching-on-secrets checked by valgrind?   | Large stack usage?   |
+|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
+| [Primary Source](#primary-source) | slhdsa-c                 | All                         | All                             | None                    | False                              | False                                          | True                 |
+
+Are implementations chosen based on runtime CPU feature detection? **Yes**.
+
+## Explanation of Terms
+
+- **Large Stack Usage**: Implementations identified as having such may cause failures when running in threads or in constrained environments.
\ No newline at end of file
diff --git a/docs/algorithms/sig/slh_dsa.yml b/docs/algorithms/sig/slh_dsa.yml
new file mode 100644 (file)
index 0000000..b24694e
--- /dev/null
@@ -0,0 +1,2376 @@
+name: SLH-DSA
+type: signature
+principal-submitters:
+- Andreas Hülsing
+auxiliary-submitters:
+- Daniel J. Bernstein
+- Christoph Dobraunig
+- Maria Eichlseder
+- Scott Fluhrer
+- Stefan-Lukas Gazdag
+- Panos Kampanakis
+- Stefan Kolbl
+- Tanja Lange
+- Martin M Lauridsen
+- Florian Mendel
+- Ruben Niederhagen
+- Christian Rechberger
+- Joost Rijneveld
+- Peter Schwabe
+- Jean-Philippe Aumasson
+- Bas Westerbaan
+- Ward Beullens
+crypto-assumption: hash-based signatures
+website: https://csrc.nist.gov/pubs/fips/205/final
+nist-round: FIPS205
+spec-version: SLH-DSA
+spdx-license-identifier: MIT or ISC or Apache 2.0
+primary-upstream:
+  source: https://github.com/pq-code-package/slhdsa-c/commit/a0fc1ff253930060d0246aebca06c2538eb92b88
+  spdx-license-identifier: MIT or ISC or Apache 2.0
+  upstream-ancestors:
+  - https://github.com/pq-code-package/slhdsa-c
+parameter-sets:
+
+  - name: SLH_DSA_PURE_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_PURE_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHA2_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHA2_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHA2_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHA2_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHA2_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHA2_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHAKE_128S
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 7856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHAKE_128F
+    claimed-nist-level: 1
+    claimed-security: EUF-CMA
+    length-public-key: 32
+    length-secret-key: 64
+    length-signature: 17088
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHAKE_192S
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 16224
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHAKE_192F
+    claimed-nist-level: 3
+    claimed-security: EUF-CMA
+    length-public-key: 48
+    length-secret-key: 96
+    length-signature: 35664
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHAKE_256S
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 29792
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_224_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_256_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_384_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_224_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_256_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_384_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHA3_512_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_128_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  - name: SLH_DSA_SHAKE_256_PREHASH_SHAKE_256F
+    claimed-nist-level: 5
+    claimed-security: EUF-CMA
+    length-public-key: 64
+    length-secret-key: 128
+    length-signature: 49856
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  
+  
\ No newline at end of file
index 49960e61bff3286c4e66c06a09810e5880cfebf7..31e63fdd71df7600d26755689699cdc975186fb6 100644 (file)
@@ -2,23 +2,23 @@
   "$schema": "https://raw.githubusercontent.com/CycloneDX/specification/1.6/schema/bom-1.6.schema.json",
   "bomFormat": "CycloneDX",
   "specVersion": "1.6",
-  "serialNumber": "urn:uuid:c419036f-6fb1-4cf6-a6b4-a473e3c40e78",
+  "serialNumber": "urn:uuid:c4108e0a-f518-4468-b04e-b237c2b763a7",
   "version": 1,
   "metadata": {
-    "timestamp": "2025-03-30T14:09:19.533630+00:00",
+    "timestamp": "2025-07-23T15:02:25.240714+00:00",
     "component": {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@630b96f49ccba9557add3e8826fb072c00d18407",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@1805ddfeaca70a7e1ac0aef11a73615fbf4d5ce3",
       "name": "liboqs",
-      "version": "630b96f49ccba9557add3e8826fb072c00d18407"
+      "version": "1805ddfeaca70a7e1ac0aef11a73615fbf4d5ce3"
     }
   },
   "components": [
     {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@630b96f49ccba9557add3e8826fb072c00d18407",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@1805ddfeaca70a7e1ac0aef11a73615fbf4d5ce3",
       "name": "liboqs",
-      "version": "630b96f49ccba9557add3e8826fb072c00d18407"
+      "version": "1805ddfeaca70a7e1ac0aef11a73615fbf4d5ce3"
     },
     {
       "type": "cryptographic-asset",
         }
       }
     },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_PURE_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_PURE_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHA2_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHA2_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHA2_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHA2_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHA2_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHA2_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_128S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHAKE_128S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_128F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHAKE_128F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 1,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_192S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHAKE_192S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_192F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHAKE_192F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 3,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_256S:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHAKE_256S",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_224_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_256_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_384_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_224_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_256_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_384_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHA3_512_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_128_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
+    {
+      "type": "cryptographic-asset",
+      "bom-ref": "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_256F:generic",
+      "name": "SLH-DSA",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "parameterSetIdentifier": "SLH_DSA_SHAKE_256_PREHASH_SHAKE_256F",
+          "primitive": "signature",
+          "executionEnvironment": "software-plain-ram",
+          "cryptoFunctions": [
+            "keygen",
+            "sign",
+            "verify"
+          ],
+          "nistQuantumSecurityLevel": 5,
+          "implementationPlatform": "generic"
+        }
+      }
+    },
     {
       "type": "cryptographic-asset",
       "bom-ref": "alg:SNOVA_24_5_4:generic",
   ],
   "dependencies": [
     {
-      "ref": "pkg:github/open-quantum-safe/liboqs@630b96f49ccba9557add3e8826fb072c00d18407",
+      "ref": "pkg:github/open-quantum-safe/liboqs@1805ddfeaca70a7e1ac0aef11a73615fbf4d5ce3",
       "provides": [
         "alg:BIKE-L1:x86_64",
         "alg:BIKE-L3:x86_64",
         "alg:ML-DSA-65:x86_64",
         "alg:ML-DSA-87:generic",
         "alg:ML-DSA-87:x86_64",
+        "alg:SLH_DSA_PURE_SHA2_128S:generic",
+        "alg:SLH_DSA_PURE_SHA2_128F:generic",
+        "alg:SLH_DSA_PURE_SHA2_192S:generic",
+        "alg:SLH_DSA_PURE_SHA2_192F:generic",
+        "alg:SLH_DSA_PURE_SHA2_256S:generic",
+        "alg:SLH_DSA_PURE_SHA2_256F:generic",
+        "alg:SLH_DSA_PURE_SHAKE_128S:generic",
+        "alg:SLH_DSA_PURE_SHAKE_128F:generic",
+        "alg:SLH_DSA_PURE_SHAKE_192S:generic",
+        "alg:SLH_DSA_PURE_SHAKE_192F:generic",
+        "alg:SLH_DSA_PURE_SHAKE_256S:generic",
+        "alg:SLH_DSA_PURE_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_128S:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_128F:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_192S:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_192F:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_256S:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHA2_256F:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_128S:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_128F:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_192S:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_192F:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_256S:generic",
+        "alg:SLH_DSA_SHA2_224_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA2_256_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA2_384_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA2_512_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA3_224_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA3_256_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA3_384_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHA3_512_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHAKE_128_PREHASH_SHAKE_256F:generic",
+        "alg:SLH_DSA_SHAKE_256_PREHASH_SHAKE_256F:generic",
         "alg:SNOVA_24_5_4:generic",
         "alg:SNOVA_24_5_4:x86_64",
         "alg:SNOVA_24_5_4:armv8-a",
diff --git a/scripts/copy_from_upstream/copy_from_slh_dsa_c.py b/scripts/copy_from_upstream/copy_from_slh_dsa_c.py
new file mode 100644 (file)
index 0000000..05ecd1a
--- /dev/null
@@ -0,0 +1,330 @@
+# SPDX-License-Identifier: MIT
+
+import os
+import yaml
+import tarfile
+import requests
+import shutil
+import jinja2
+import glob
+import itertools
+import copy
+
+#get contents of a file
+def file_get_contents(filename, encoding=None):
+    with open(filename, mode='r', encoding=encoding) as fh:
+        return fh.read()
+
+#copy tarball of the specified commit
+def copy_from_commit():
+    tar_name = 'slh_dsa_c.tar.gz'
+    tar_path = os.path.join(slh_dir, tar_name)
+
+    #clean up code
+    shutil.rmtree(os.path.join(slh_dsa_c_dir))
+
+    url = os.path.join('https://github.com/pq-code-package/slhdsa-c/archive/', commit_hash, ".tar.gz")
+    
+    response = requests.get(url) 
+
+    if response.status_code == 200:
+        os.makedirs(slh_dir, exist_ok=True)
+
+        with open(tar_path, 'wb') as file:
+            file.write(response.content)
+
+        with tarfile.open(tar_path) as tar_file:
+            tar_file.extractall(slh_dir)
+        
+        os.remove(tar_path)
+
+        for entry in os.listdir(slh_dir):
+            if entry.startswith('slhdsa'):
+                full_path = os.path.join(slh_dir, entry)
+                if os.path.isdir(full_path):
+                    os.rename(full_path, slh_dsa_temp_dir)
+
+        #load meta file
+        meta = file_get_contents(meta_file, encoding='utf-8')
+        meta = yaml.safe_load(meta)
+
+        #copy sources from temp
+        os.makedirs(slh_dsa_c_dir, exist_ok=True)
+        sources = meta['sources']
+
+        for root, dirs, files in os.walk(slh_dsa_temp_dir):
+            for file in files:
+                full_path = os.path.join(root, file)
+                rel_path = os.path.relpath(full_path, slh_dsa_temp_dir)
+                if rel_path in sources:
+                    os.makedirs(os.path.dirname(os.path.join(slh_dsa_c_dir,rel_path)), exist_ok=True)
+                    shutil.copy(os.path.join(slh_dsa_temp_dir,rel_path), os.path.join(slh_dsa_c_dir,rel_path))
+        
+        shutil.rmtree(slh_dsa_temp_dir)
+
+        print('Copied from slh dsa commit succesfully')
+    else:
+        print('Failed to copy from slh dsa commit with HTTP status code: ' + str(response.status_code))
+
+# Will retrieve start or end indices for sections
+def section_bound(identifier, delimiter, text, side):
+    searchString = delimiter + ' OQS_COPY_FROM_SLH_DSA_FRAGMENT_' + identifier + '_' + side
+    res = text.find(searchString)
+    if side == 'START':
+        res += len(searchString)
+    return res
+
+#replace a single fragment
+def fragment_replacer(template_file, destination_file, identifier, variants, destination_delimiter):
+    #get section at identifier in template
+    template = file_get_contents(template_file)
+    section = template[section_bound(identifier,'#####',template,'START'):section_bound(identifier,'#####',template,'END')]
+    
+    #get preamble/postamble in destination file
+    destination = file_get_contents(destination_file)
+    preamble = destination[:section_bound(identifier,destination_delimiter,destination,'START')]
+    postamble = destination[section_bound(identifier,destination_delimiter,destination,'END'):]
+
+    #replace destination section with rendered template
+    contents = preamble + jinja2.Template(section).render(variants) + postamble
+    with open(destination_file, "w") as f:
+                f.write(contents)
+
+#replace all fragment in destination file
+def file_replacer(template_file, destination_file, variants, destination_delimiter):
+    #get fragment list in template file
+    template = file_get_contents(template_file)
+    list_string = template[section_bound('IDENTIFIER_LIST','#####',template,'START'):section_bound('IDENTIFIER_LIST','#####',template,'END')]
+    id_list = list_string.split()
+    for id in id_list:
+        fragment_replacer(template_file,destination_file,id,variants, destination_delimiter)
+
+def doc_replacer(template_file, destination_file):
+    implementations = []
+
+    #add pure variants
+    for i,j in itertools.product(range(len(meta['hashAlgs'])),range(len(meta['paramSets']))):
+        hashAlg = meta['hashAlgs'][i]
+        paramSet = meta['paramSets'][j]
+        variant = "SLH_DSA_PURE_" + hashAlg['name'].upper() + "_" + paramSet['name'].upper()
+        implementations.append({"variant": variant, "paramSet": paramSet})
+    
+    #add prehash variants
+    for i,j,k in itertools.product(range(len(meta['hashAlgs'])),range(len(meta['paramSets'])),range(len(meta['prehashHashAlgs']))):
+        hashAlg = meta['hashAlgs'][i]
+        paramSet = meta['paramSets'][j]
+        prehashHashAlg = meta['prehashHashAlgs'][k]
+        variant = "SLH_DSA_" + prehashHashAlg['name'].upper() + "_PREHASH_" + hashAlg['name'].upper() + "_" + paramSet['name'].upper()
+        implementations.append({"variant": variant, "paramSet": paramSet})
+    
+    #render template
+    template = file_get_contents(template_file)
+
+    #write to destination
+    contents = jinja2.Template(template).render({'implementations': implementations, 'commitHash': commit_hash})
+    with open(destination_file, "w") as f:
+                f.write(contents)
+
+#generate slh_dsa specific files
+def internal_code_gen():
+    #clean up code
+    shutil.rmtree(slh_wrappers_dir)
+
+    #Start Header File and Setup
+    header_template = file_get_contents(jinja_header_file)
+    
+    header_section = header_template[section_bound('0','#####', header_template,'START'):section_bound('0','#####',header_template,'END')]
+    header_contents = jinja2.Template(header_section).render()
+    
+    src_template = file_get_contents(jinja_src_file)
+    header_section = header_template[section_bound('BODY','#####',header_template,'START'):section_bound('BODY','#####',header_template,'END')]
+    
+    algDetails = meta['algDetails']
+    impl['algVersion'] = algDetails['algVersion']
+    impl['eufCMA'] = algDetails['eufCMA']
+    impl['sufCMA'] = algDetails['sufCMA']
+
+    # Create Src Files for Pure variants
+    for paramSet in meta['paramSets']:
+        impl['paramSet'] = paramSet['name']
+        impl['pkSize'] = paramSet['pkSize']
+        impl['skSize'] = paramSet['skSize']
+        impl['sigSize'] = paramSet['sigSize']
+        impl['claimedNISTLevel'] = paramSet['claimedNISTLevel']
+    
+        for hashAlg in meta['hashAlgs']:
+            impl['hashAlg'] = hashAlg['name']
+    
+            src_contents = jinja2.Template(src_template).render(impl)
+    
+            src_file = 'slh_dsa_pure_' + impl['hashAlg'] + '_' + impl['paramSet'] + '.c'
+            src_path = os.path.join(slh_wrappers_dir, 'pure', src_file)
+            os.makedirs(os.path.dirname(src_path),exist_ok=True)
+            
+            with open(src_path, "w") as f:
+                f.write(src_contents)
+    
+            header_contents += jinja2.Template(header_section).render(impl)
+    
+    # Create Src Files for Prehash variants
+    impl['pure'] = False
+    
+    for paramSet in meta['paramSets']:
+        impl['paramSet'] = paramSet['name']
+        impl['pkSize'] = paramSet['pkSize']
+        impl['skSize'] = paramSet['skSize']
+        impl['sigSize'] = paramSet['sigSize']
+        impl['claimedNISTLevel'] = paramSet['claimedNISTLevel']
+    
+        for hashAlg in meta['hashAlgs']:
+            impl['hashAlg'] = hashAlg['name']
+
+            for i in range(len(meta['prehashHashAlgs'])):
+                prehashHashAlg = meta['prehashHashAlgs'][i]
+                prehashString = prehashStrings[i]
+
+                impl['prehashHashAlg'] = prehashHashAlg['name']
+                impl['prehashString'] = prehashString['name']
+    
+                src_contents = jinja2.Template(src_template).render(impl)
+    
+                src_file = 'slh_dsa_' + impl['prehashHashAlg'] + '_prehash_' + impl['hashAlg'] + '_' + impl['paramSet'] + '.c'
+                src_path = os.path.join(slh_wrappers_dir, 'prehash_' + prehashHashAlg['name'], src_file)
+                os.makedirs(os.path.dirname(src_path),exist_ok=True)
+    
+                with open(src_path, "w") as f:
+                    f.write(src_contents)
+    
+                header_contents += jinja2.Template(header_section).render(impl)
+    
+    #finish header file
+    header_section = header_template[section_bound('2','#####',header_template,'START'):section_bound('2','#####',header_template,'END')]
+    header_contents += jinja2.Template(header_section).render()
+    header_file = "sig_slh_dsa.h"
+    header_path = os.path.join(slh_dir, header_file)
+    with open(header_path, "w") as f:
+                f.write(header_contents)
+
+def internal_cmake_gen():
+    sources = [
+        os.path.relpath(file, start=slh_dir)
+        for file in glob.glob(os.path.join(slh_dir, '**', '*.c'), recursive=True)
+        if 'slh_dsa_c/test/' not in os.path.relpath(file, start=slh_dir)
+    ]
+    sources.sort()
+    prehashHashAlgs = [prehashHashAlg['name'] for prehashHashAlg in meta['prehashHashAlgs']]
+
+    cmake_template = file_get_contents(jinja_cmake_file)
+    cmake_contents = jinja2.Template(cmake_template).render({"sources": sources,
+                                                            "prehashHashAlgs": prehashHashAlgs})
+    cmake_file = "CMakeLists.txt"
+    cmake_path = os.path.join(slh_dir, cmake_file)
+    with open(cmake_path, "w") as f:
+                f.write(cmake_contents)
+
+#create list of all slh_dsa variants
+def list_variants():
+    variants = []
+    #add pure variants
+    for hashAlg, paramSet in itertools.product(meta['hashAlgs'], meta['paramSets']):
+        variants.append('pure_' + hashAlg['name'] + '_' + paramSet['name'])
+    #add prehash variants
+    for prehashHashAlg, hashAlg, paramSet in itertools.product(meta['prehashHashAlgs'], meta['hashAlgs'], meta['paramSets']):
+        variants.append(prehashHashAlg['name'] + '_prehash_' + hashAlg['name'] + '_' + paramSet['name'])
+    return variants
+
+def main():
+    os.chdir(os.path.join(os.environ['LIBOQS_DIR']))
+
+    #initialize globals
+    global commit_hash, slh_dir, slh_dsa_c_dir, slh_dsa_temp_dir, slh_wrappers_dir, template_dir, meta_file, \
+        jinja_header_file, jinja_src_file, jinja_cmake_file, meta, prehashStrings, impl, variants, jinja_sig_c_file, \
+        jinja_sig_h_file, jinja_alg_support_file, jinja_oqsconfig_file, sig_c_path, sig_h_path, \
+        alg_support_path, oqsconfig_path
+
+    # This commit hash will need to be updated
+    commit_hash = "a0fc1ff253930060d0246aebca06c2538eb92b88"
+    
+    # internal paths
+    slh_dir = os.path.join(os.environ['LIBOQS_DIR'], 'src/sig/slh_dsa')
+    slh_dsa_c_dir = os.path.join(slh_dir, 'slh_dsa_c')
+    slh_dsa_temp_dir = os.path.join(slh_dir, 'slh_dsa_temp')
+    slh_wrappers_dir = os.path.join(slh_dir, 'wrappers')
+    template_dir = os.path.join(slh_dir, 'templates')
+    
+    #ensure these paths exist
+    os.makedirs(slh_dir,exist_ok=True)
+    os.makedirs(slh_dsa_c_dir,exist_ok=True)
+    os.makedirs(slh_wrappers_dir,exist_ok=True)
+    os.makedirs(template_dir,exist_ok=True)
+    
+    # internal files
+    meta_file = os.path.join(slh_dsa_temp_dir, 'integration/liboqs/META.yml')
+    jinja_header_file = os.path.join(template_dir, 'slh_dsa_header_template.jinja')
+    jinja_src_file = os.path.join(template_dir, 'slh_dsa_src_template.jinja')
+    jinja_cmake_file = os.path.join(template_dir, 'slh_dsa_cmake_template.jinja')
+    
+    #copy source code from upstream
+    copy_from_commit()
+
+    #load meta file globally
+    meta_file = os.path.join(slh_dsa_c_dir, 'integration/liboqs/META.yml')
+    meta = file_get_contents(meta_file, encoding='utf-8')
+    meta = yaml.safe_load(meta)
+    prehashStrings = copy.deepcopy(meta['prehashHashAlgs'])
+    for i in range(len(meta['prehashHashAlgs'])):
+        meta['prehashHashAlgs'][i]['name'] = (meta['prehashHashAlgs'][i]['name']).replace("/","_")
+
+    #Create implementation dictionary
+    impl = {
+      "pure": True,
+      "paramSet": "",
+      "hashAlg": "",
+      "prehashHashAlg": "",
+      "prehashString": "",
+      "pkSize": "",
+      "skSize": "",
+      "sigSize": "",
+      "algVersion": "",
+      "claimedNISTLevel": "",
+      "eufCMA": "",
+      "sufCMA": ""
+    }
+    
+    #Replace contents of other files using fragments
+    #generate variant list
+    variants = list_variants()
+    
+    #enumerate template file paths
+    jinja_sig_c_file = os.path.join(template_dir,'slh_dsa_sig_c_template.jinja')
+    jinja_sig_h_file = os.path.join(template_dir,'slh_dsa_sig_h_template.jinja')
+    jinja_alg_support_file = os.path.join(template_dir,'slh_dsa_alg_support_template.jinja')
+    jinja_oqsconfig_file = os.path.join(template_dir,'slh_dsa_oqsconfig_template.jinja')
+    jinja_docs_yml_file = os.path.join(template_dir,'slh_dsa_docs_yml_template.jinja')
+    jinja_docs_md_file = os.path.join(template_dir,'slh_dsa_docs_md_template.jinja')
+    
+    #enumerate destination file paths
+    sig_c_path = os.path.join(os.environ['LIBOQS_DIR'],'src','sig','sig.c')
+    sig_h_path = os.path.join(os.environ['LIBOQS_DIR'],'src','sig','sig.h')
+    alg_support_path = os.path.join(os.environ['LIBOQS_DIR'],'.CMake','alg_support.cmake')
+    oqsconfig_path = os.path.join(os.environ['LIBOQS_DIR'],'src','oqsconfig.h.cmake')
+    docs_yml_path = os.path.join(os.environ['LIBOQS_DIR'],'docs','algorithms','sig','slh_dsa.yml')
+    docs_md_path = os.path.join(os.environ['LIBOQS_DIR'],'docs','algorithms','sig','slh_dsa.md')
+    
+    #generate internal c and h files
+    internal_code_gen()
+    
+    #generate internal cmake file
+    internal_cmake_gen()
+    
+    #replace file contents
+    file_replacer(jinja_sig_c_file, sig_c_path, {'variants': variants},'/////')
+    file_replacer(jinja_sig_h_file, sig_h_path, {'variants': variants},'/////')
+    file_replacer(jinja_alg_support_file, alg_support_path, {'variants': variants},'#####')
+    file_replacer(jinja_oqsconfig_file, oqsconfig_path, {'variants': variants},'/////')
+    
+    #replace document contents
+    doc_replacer(jinja_docs_yml_file, docs_yml_path)
+
+if __name__ == "__main__":
+    main()
index baf69226bb26194cce5db122e0c9181bdf2e04ed..b72d7a1a1bc4eb06c8544e4d8d39622b43ebd781 100755 (executable)
@@ -15,6 +15,7 @@ import sys
 import json
 import platform
 import update_upstream_alg_docs
+import copy_from_slh_dsa_c
 
 # kats of all algs
 kats = {}
@@ -835,6 +836,9 @@ def verify_from_upstream():
 non_upstream_kems = count_non_upstream_kems(['bike', 'frodokem', 'ntruprime'])
 
 if args.operation == "copy":
+    # copy_from_slh_dsa_c will modify slh_dsa.yml before copy_from_upstream modifies md files
+    copy_from_slh_dsa_c.main()
+    os.chdir(os.path.join(os.environ['LIBOQS_DIR'],"scripts","copy_from_upstream"))
     copy_from_upstream()
 elif args.operation == "libjade":
     copy_from_libjade()
index 67c1f28252d3b069c2f8bbc5152ffcab1ca84502..e9650a30424d6f12ba7f5cdf1bef6113693652ee 100644 (file)
@@ -10,3 +10,4 @@ tabulate==0.8.10
 typing-extensions==3.7.4.3
 wget==3.2
 zipp==3.19.1
+requests==2.32.4
index 888ef5d83933d1eb99065b63dd89b121ceb8f5f7..52e8c415f1d76d7df4ea9e105269f9a2c6f42f8d 100644 (file)
@@ -1,5 +1,5 @@
 #
-# This file is autogenerated by pip-compile with Python 3.11
+# This file is autogenerated by pip-compile with Python 3.12
 # by the following command:
 #
 #    pip-compile --generate-hashes requirements.in
@@ -8,6 +8,104 @@ attrs==20.3.0 \
     --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \
     --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700
     # via -r requirements.in
+certifi==2025.6.15 \
+    --hash=sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057 \
+    --hash=sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b
+    # via requests
+charset-normalizer==3.4.2 \
+    --hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \
+    --hash=sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45 \
+    --hash=sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7 \
+    --hash=sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0 \
+    --hash=sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7 \
+    --hash=sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d \
+    --hash=sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d \
+    --hash=sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0 \
+    --hash=sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184 \
+    --hash=sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db \
+    --hash=sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b \
+    --hash=sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64 \
+    --hash=sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b \
+    --hash=sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8 \
+    --hash=sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff \
+    --hash=sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344 \
+    --hash=sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58 \
+    --hash=sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e \
+    --hash=sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471 \
+    --hash=sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148 \
+    --hash=sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a \
+    --hash=sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836 \
+    --hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e \
+    --hash=sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63 \
+    --hash=sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c \
+    --hash=sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1 \
+    --hash=sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01 \
+    --hash=sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366 \
+    --hash=sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58 \
+    --hash=sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5 \
+    --hash=sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c \
+    --hash=sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2 \
+    --hash=sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a \
+    --hash=sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597 \
+    --hash=sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b \
+    --hash=sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5 \
+    --hash=sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb \
+    --hash=sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f \
+    --hash=sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0 \
+    --hash=sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941 \
+    --hash=sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0 \
+    --hash=sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86 \
+    --hash=sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7 \
+    --hash=sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7 \
+    --hash=sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455 \
+    --hash=sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6 \
+    --hash=sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4 \
+    --hash=sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0 \
+    --hash=sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3 \
+    --hash=sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1 \
+    --hash=sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6 \
+    --hash=sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981 \
+    --hash=sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c \
+    --hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 \
+    --hash=sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645 \
+    --hash=sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7 \
+    --hash=sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12 \
+    --hash=sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa \
+    --hash=sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd \
+    --hash=sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef \
+    --hash=sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f \
+    --hash=sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2 \
+    --hash=sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d \
+    --hash=sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5 \
+    --hash=sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02 \
+    --hash=sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3 \
+    --hash=sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd \
+    --hash=sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e \
+    --hash=sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214 \
+    --hash=sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd \
+    --hash=sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a \
+    --hash=sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c \
+    --hash=sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681 \
+    --hash=sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba \
+    --hash=sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f \
+    --hash=sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a \
+    --hash=sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28 \
+    --hash=sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691 \
+    --hash=sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82 \
+    --hash=sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a \
+    --hash=sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027 \
+    --hash=sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7 \
+    --hash=sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518 \
+    --hash=sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf \
+    --hash=sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b \
+    --hash=sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9 \
+    --hash=sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544 \
+    --hash=sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da \
+    --hash=sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509 \
+    --hash=sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f \
+    --hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a \
+    --hash=sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f
+    # via requests
 gitdb==4.0.11 \
     --hash=sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4 \
     --hash=sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b
@@ -16,6 +114,10 @@ gitpython==3.1.41 \
     --hash=sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c \
     --hash=sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048
     # via -r requirements.in
+idna==3.10 \
+    --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
+    --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
+    # via requests
 importlib-metadata==3.7.0 \
     --hash=sha256:24499ffde1b80be08284100393955842be4a59c7c16bbf2738aad0e464a8e0aa \
     --hash=sha256:c6af5dbf1126cd959c4a8d8efd61d4d3c83bddb0459a17e554284a077574b614
@@ -155,6 +257,10 @@ pyyaml==6.0.1 \
     --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \
     --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f
     # via -r requirements.in
+requests==2.32.4 \
+    --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \
+    --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422
+    # via -r requirements.in
 smmap==5.0.1 \
     --hash=sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62 \
     --hash=sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da
@@ -168,6 +274,10 @@ typing-extensions==3.7.4.3 \
     --hash=sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c \
     --hash=sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f
     # via -r requirements.in
+urllib3==2.5.0 \
+    --hash=sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760 \
+    --hash=sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc
+    # via requests
 wget==3.2 \
     --hash=sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061
     # via -r requirements.in
index 0ac7133145403005ee3486081d19d25d645e97af..314f593140c80e3e66ee0ffd2fe991f1a9f463e1 100644 (file)
@@ -1,5 +1,5 @@
 {% set unary %}{% for family in instructions['sigs'] %}{% for scheme in family['schemes'] %}1{% endfor %}{% endfor %}{% endset %}
 {% set unary_alias %}{% for family in instructions['sigs'] %}{% for scheme in family['schemes'] if 'alias_scheme' in scheme %}2{% endfor %}{% endfor %}{% endset %}
 /** Number of algorithm identifiers above. */
-#define OQS_SIG_algs_length {{ unary|length + unary_alias|length }}
+#define OQS_SIG_algs_length {{ unary|length + unary_alias|length }} + OQS_SIG_SLH_DSA_algs_length
 
index a6be3cc0801c017aa684df4261021aea0b7c9142..4e3c52078970499d63ef1a3656c52746846029f3 100644 (file)
@@ -73,6 +73,11 @@ if(OQS_ENABLE_SIG_SNOVA)
 endif()
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ALG_OBJECTS_END
 
+if(OQS_ENABLE_SIG_SLH_DSA)
+    add_subdirectory(sig/slh_dsa)
+    set(SIG_OBJS ${SIG_OBJS} ${SLH_DSA_OBJS})
+endif()
+
 if(OQS_ENABLE_SIG_STFL_XMSS)
     add_subdirectory(sig_stfl/xmss)
     set(SIG_STFL_OBJS ${SIG_STFL_OBJS} ${XMSS_OBJS})
index 5d02314c2ba9894acce4a0f9ef8346c046e91678..8fc996bdf8ea2b2e584639c7fa9ca9b7b6525869 100644 (file)
 #cmakedefine OQS_ENABLE_SIG_snova_SNOVA_29_6_5_avx2 1
 #cmakedefine OQS_ENABLE_SIG_snova_SNOVA_29_6_5_neon 1
 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ALG_ENABLE_DEFINES_END
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ADD_ALG_ENABLE_DEFINES_START
+#cmakedefine OQS_ENABLE_SIG_SLH_DSA 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_pure_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192f 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256s 1
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256f 1
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ADD_ALG_ENABLE_DEFINES_END
 
 ///// OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ALG_ENABLE_DEFINES_START
 
index 029931d7bd423d1145d1190e7e3b5e6c7360ef1d..a51a55240b7aa9a488cd3837ec72f05f98c7497a 100644 (file)
@@ -83,6 +83,164 @@ OQS_API const char *OQS_SIG_alg_identifier(size_t i) {
                OQS_SIG_alg_snova_SNOVA_24_5_5,
                OQS_SIG_alg_snova_SNOVA_60_10_4,
                OQS_SIG_alg_snova_SNOVA_29_6_5,///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALG_IDENTIFIER_END
+               ///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGID_START
+               OQS_SIG_alg_slh_dsa_pure_sha2_128s,
+               OQS_SIG_alg_slh_dsa_pure_sha2_128f,
+               OQS_SIG_alg_slh_dsa_pure_sha2_192s,
+               OQS_SIG_alg_slh_dsa_pure_sha2_192f,
+               OQS_SIG_alg_slh_dsa_pure_sha2_256s,
+               OQS_SIG_alg_slh_dsa_pure_sha2_256f,
+               OQS_SIG_alg_slh_dsa_pure_shake_128s,
+               OQS_SIG_alg_slh_dsa_pure_shake_128f,
+               OQS_SIG_alg_slh_dsa_pure_shake_192s,
+               OQS_SIG_alg_slh_dsa_pure_shake_192f,
+               OQS_SIG_alg_slh_dsa_pure_shake_256s,
+               OQS_SIG_alg_slh_dsa_pure_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256f,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128s,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128f,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192s,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192f,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256s,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256f,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128s,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128f,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192s,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192f,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256s,
+               OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256f,
+               ///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGID_END
        };
        if (i >= OQS_SIG_algs_length) {
                return NULL;
@@ -577,493 +735,2369 @@ OQS_API int OQS_SIG_alg_is_enabled(const char *method_name) {
                return 0;
 #endif
 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ENABLED_CASE_END
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ENABLED_START
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192f
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256s
+               return 1;
+#else
+               return 0;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256f
+               return 1;
+#else
+               return 0;
+#endif
+               ///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ENABLED_END
        } else {
                return 0;
        }
 }
 
-OQS_API OQS_SIG *OQS_SIG_new(const char *method_name) {
-       if (method_name == NULL) {
+OQS_API OQS_SIG *OQS_SIG_new(const char *method_name) {
+       if (method_name == NULL) {
+               return NULL;
+       }
+       if (0) {
+               ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_NEW_CASE_START
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_2)) {
+#ifdef OQS_ENABLE_SIG_dilithium_2
+               return OQS_SIG_dilithium_2_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_3)) {
+#ifdef OQS_ENABLE_SIG_dilithium_3
+               return OQS_SIG_dilithium_3_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_5)) {
+#ifdef OQS_ENABLE_SIG_dilithium_5
+               return OQS_SIG_dilithium_5_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_ml_dsa_44)) {
+#ifdef OQS_ENABLE_SIG_ml_dsa_44
+               return OQS_SIG_ml_dsa_44_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_ml_dsa_65)) {
+#ifdef OQS_ENABLE_SIG_ml_dsa_65
+               return OQS_SIG_ml_dsa_65_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_ml_dsa_87)) {
+#ifdef OQS_ENABLE_SIG_ml_dsa_87
+               return OQS_SIG_ml_dsa_87_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_512)) {
+#ifdef OQS_ENABLE_SIG_falcon_512
+               return OQS_SIG_falcon_512_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_1024)) {
+#ifdef OQS_ENABLE_SIG_falcon_1024
+               return OQS_SIG_falcon_1024_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_padded_512)) {
+#ifdef OQS_ENABLE_SIG_falcon_padded_512
+               return OQS_SIG_falcon_padded_512_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_padded_1024)) {
+#ifdef OQS_ENABLE_SIG_falcon_padded_1024
+               return OQS_SIG_falcon_padded_1024_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_128f_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_sha2_128f_simple
+               return OQS_SIG_sphincs_sha2_128f_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_128s_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_sha2_128s_simple
+               return OQS_SIG_sphincs_sha2_128s_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_192f_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_sha2_192f_simple
+               return OQS_SIG_sphincs_sha2_192f_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_192s_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_sha2_192s_simple
+               return OQS_SIG_sphincs_sha2_192s_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_256f_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_sha2_256f_simple
+               return OQS_SIG_sphincs_sha2_256f_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_256s_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_sha2_256s_simple
+               return OQS_SIG_sphincs_sha2_256s_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_128f_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_shake_128f_simple
+               return OQS_SIG_sphincs_shake_128f_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_128s_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_shake_128s_simple
+               return OQS_SIG_sphincs_shake_128s_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_192f_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_shake_192f_simple
+               return OQS_SIG_sphincs_shake_192f_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_192s_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_shake_192s_simple
+               return OQS_SIG_sphincs_shake_192s_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_256f_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_shake_256f_simple
+               return OQS_SIG_sphincs_shake_256f_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_256s_simple)) {
+#ifdef OQS_ENABLE_SIG_sphincs_shake_256s_simple
+               return OQS_SIG_sphincs_shake_256s_simple_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_mayo_1)) {
+#ifdef OQS_ENABLE_SIG_mayo_1
+               return OQS_SIG_mayo_1_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_mayo_2)) {
+#ifdef OQS_ENABLE_SIG_mayo_2
+               return OQS_SIG_mayo_2_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_mayo_3)) {
+#ifdef OQS_ENABLE_SIG_mayo_3
+               return OQS_SIG_mayo_3_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_mayo_5)) {
+#ifdef OQS_ENABLE_SIG_mayo_5
+               return OQS_SIG_mayo_5_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_128_balanced)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_128_balanced
+               return OQS_SIG_cross_rsdp_128_balanced_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_128_fast)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_128_fast
+               return OQS_SIG_cross_rsdp_128_fast_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_128_small)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_128_small
+               return OQS_SIG_cross_rsdp_128_small_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_192_balanced)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_192_balanced
+               return OQS_SIG_cross_rsdp_192_balanced_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_192_fast)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_192_fast
+               return OQS_SIG_cross_rsdp_192_fast_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_192_small)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_192_small
+               return OQS_SIG_cross_rsdp_192_small_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_256_balanced)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_256_balanced
+               return OQS_SIG_cross_rsdp_256_balanced_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_256_fast)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_256_fast
+               return OQS_SIG_cross_rsdp_256_fast_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_256_small)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdp_256_small
+               return OQS_SIG_cross_rsdp_256_small_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_128_balanced)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_128_balanced
+               return OQS_SIG_cross_rsdpg_128_balanced_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_128_fast)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_128_fast
+               return OQS_SIG_cross_rsdpg_128_fast_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_128_small)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_128_small
+               return OQS_SIG_cross_rsdpg_128_small_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_192_balanced)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_192_balanced
+               return OQS_SIG_cross_rsdpg_192_balanced_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_192_fast)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_192_fast
+               return OQS_SIG_cross_rsdpg_192_fast_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_192_small)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_192_small
+               return OQS_SIG_cross_rsdpg_192_small_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_256_balanced)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_256_balanced
+               return OQS_SIG_cross_rsdpg_256_balanced_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_256_fast)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_256_fast
+               return OQS_SIG_cross_rsdpg_256_fast_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_256_small)) {
+#ifdef OQS_ENABLE_SIG_cross_rsdpg_256_small
+               return OQS_SIG_cross_rsdpg_256_small_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Is)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_Is
+               return OQS_SIG_uov_ov_Is_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Ip)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_Ip
+               return OQS_SIG_uov_ov_Ip_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_III)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_III
+               return OQS_SIG_uov_ov_III_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_V)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_V
+               return OQS_SIG_uov_ov_V_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Is_pkc)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_Is_pkc
+               return OQS_SIG_uov_ov_Is_pkc_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Ip_pkc)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_Ip_pkc
+               return OQS_SIG_uov_ov_Ip_pkc_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_III_pkc)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_III_pkc
+               return OQS_SIG_uov_ov_III_pkc_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_V_pkc)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_V_pkc
+               return OQS_SIG_uov_ov_V_pkc_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Is_pkc_skc)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_Is_pkc_skc
+               return OQS_SIG_uov_ov_Is_pkc_skc_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Ip_pkc_skc)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_Ip_pkc_skc
+               return OQS_SIG_uov_ov_Ip_pkc_skc_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_III_pkc_skc)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_III_pkc_skc
+               return OQS_SIG_uov_ov_III_pkc_skc_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_V_pkc_skc)) {
+#ifdef OQS_ENABLE_SIG_uov_ov_V_pkc_skc
+               return OQS_SIG_uov_ov_V_pkc_skc_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_4)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_4
+               return OQS_SIG_snova_SNOVA_24_5_4_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_4_SHAKE)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_4_SHAKE
+               return OQS_SIG_snova_SNOVA_24_5_4_SHAKE_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_4_esk)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_4_esk
+               return OQS_SIG_snova_SNOVA_24_5_4_esk_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_4_SHAKE_esk)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_4_SHAKE_esk
+               return OQS_SIG_snova_SNOVA_24_5_4_SHAKE_esk_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_37_17_2)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_37_17_2
+               return OQS_SIG_snova_SNOVA_37_17_2_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_25_8_3)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_25_8_3
+               return OQS_SIG_snova_SNOVA_25_8_3_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_56_25_2)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_56_25_2
+               return OQS_SIG_snova_SNOVA_56_25_2_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_49_11_3)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_49_11_3
+               return OQS_SIG_snova_SNOVA_49_11_3_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_37_8_4)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_37_8_4
+               return OQS_SIG_snova_SNOVA_37_8_4_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_5)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_5
+               return OQS_SIG_snova_SNOVA_24_5_5_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_60_10_4)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_60_10_4
+               return OQS_SIG_snova_SNOVA_60_10_4_new();
+#else
+               return NULL;
+#endif
+
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_29_6_5)) {
+#ifdef OQS_ENABLE_SIG_snova_SNOVA_29_6_5
+               return OQS_SIG_snova_SNOVA_29_6_5_new();
+#else
+               return NULL;
+#endif
+///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_NEW_CASE_END
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_SIGNEW_START
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_128s
+               return OQS_SIG_slh_dsa_pure_sha2_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_128f
+               return OQS_SIG_slh_dsa_pure_sha2_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_192s
+               return OQS_SIG_slh_dsa_pure_sha2_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_192f
+               return OQS_SIG_slh_dsa_pure_sha2_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_256s
+               return OQS_SIG_slh_dsa_pure_sha2_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_sha2_256f
+               return OQS_SIG_slh_dsa_pure_sha2_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_128s
+               return OQS_SIG_slh_dsa_pure_shake_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_128f
+               return OQS_SIG_slh_dsa_pure_shake_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_192s
+               return OQS_SIG_slh_dsa_pure_shake_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_192f
+               return OQS_SIG_slh_dsa_pure_shake_192f_new();
+#else
                return NULL;
-       }
-       if (0) {
-               ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_NEW_CASE_START
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_2)) {
-#ifdef OQS_ENABLE_SIG_dilithium_2
-               return OQS_SIG_dilithium_2_new();
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_256s
+               return OQS_SIG_slh_dsa_pure_shake_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_3)) {
-#ifdef OQS_ENABLE_SIG_dilithium_3
-               return OQS_SIG_dilithium_3_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_pure_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_pure_shake_256f
+               return OQS_SIG_slh_dsa_pure_shake_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_5)) {
-#ifdef OQS_ENABLE_SIG_dilithium_5
-               return OQS_SIG_dilithium_5_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_ml_dsa_44)) {
-#ifdef OQS_ENABLE_SIG_ml_dsa_44
-               return OQS_SIG_ml_dsa_44_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_ml_dsa_65)) {
-#ifdef OQS_ENABLE_SIG_ml_dsa_65
-               return OQS_SIG_ml_dsa_65_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_new();
+#else
+               return NULL;
+#endif
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_ml_dsa_87)) {
-#ifdef OQS_ENABLE_SIG_ml_dsa_87
-               return OQS_SIG_ml_dsa_87_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_512)) {
-#ifdef OQS_ENABLE_SIG_falcon_512
-               return OQS_SIG_falcon_512_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_1024)) {
-#ifdef OQS_ENABLE_SIG_falcon_1024
-               return OQS_SIG_falcon_1024_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_padded_512)) {
-#ifdef OQS_ENABLE_SIG_falcon_padded_512
-               return OQS_SIG_falcon_padded_512_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_padded_1024)) {
-#ifdef OQS_ENABLE_SIG_falcon_padded_1024
-               return OQS_SIG_falcon_padded_1024_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_128f_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_sha2_128f_simple
-               return OQS_SIG_sphincs_sha2_128f_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_128s_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_sha2_128s_simple
-               return OQS_SIG_sphincs_sha2_128s_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_192f_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_sha2_192f_simple
-               return OQS_SIG_sphincs_sha2_192f_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_192s_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_sha2_192s_simple
-               return OQS_SIG_sphincs_sha2_192s_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_256f_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_sha2_256f_simple
-               return OQS_SIG_sphincs_sha2_256f_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha2_256s_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_sha2_256s_simple
-               return OQS_SIG_sphincs_sha2_256s_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_128f_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_shake_128f_simple
-               return OQS_SIG_sphincs_shake_128f_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_128s_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_shake_128s_simple
-               return OQS_SIG_sphincs_shake_128s_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_192f_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_shake_192f_simple
-               return OQS_SIG_sphincs_shake_192f_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_192s_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_shake_192s_simple
-               return OQS_SIG_sphincs_shake_192s_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_256f_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_shake_256f_simple
-               return OQS_SIG_sphincs_shake_256f_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake_256s_simple)) {
-#ifdef OQS_ENABLE_SIG_sphincs_shake_256s_simple
-               return OQS_SIG_sphincs_shake_256s_simple_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_mayo_1)) {
-#ifdef OQS_ENABLE_SIG_mayo_1
-               return OQS_SIG_mayo_1_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_mayo_2)) {
-#ifdef OQS_ENABLE_SIG_mayo_2
-               return OQS_SIG_mayo_2_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_mayo_3)) {
-#ifdef OQS_ENABLE_SIG_mayo_3
-               return OQS_SIG_mayo_3_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_mayo_5)) {
-#ifdef OQS_ENABLE_SIG_mayo_5
-               return OQS_SIG_mayo_5_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_128_balanced)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_128_balanced
-               return OQS_SIG_cross_rsdp_128_balanced_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_128_fast)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_128_fast
-               return OQS_SIG_cross_rsdp_128_fast_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_128_small)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_128_small
-               return OQS_SIG_cross_rsdp_128_small_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_192_balanced)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_192_balanced
-               return OQS_SIG_cross_rsdp_192_balanced_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_192_fast)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_192_fast
-               return OQS_SIG_cross_rsdp_192_fast_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_192_small)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_192_small
-               return OQS_SIG_cross_rsdp_192_small_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_256_balanced)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_256_balanced
-               return OQS_SIG_cross_rsdp_256_balanced_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_256_fast)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_256_fast
-               return OQS_SIG_cross_rsdp_256_fast_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdp_256_small)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdp_256_small
-               return OQS_SIG_cross_rsdp_256_small_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_128_balanced)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_128_balanced
-               return OQS_SIG_cross_rsdpg_128_balanced_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_128_fast)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_128_fast
-               return OQS_SIG_cross_rsdpg_128_fast_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_128_small)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_128_small
-               return OQS_SIG_cross_rsdpg_128_small_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_192_balanced)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_192_balanced
-               return OQS_SIG_cross_rsdpg_192_balanced_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_192_fast)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_192_fast
-               return OQS_SIG_cross_rsdpg_192_fast_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128s
+               return OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_192_small)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_192_small
-               return OQS_SIG_cross_rsdpg_192_small_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128f
+               return OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_256_balanced)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_256_balanced
-               return OQS_SIG_cross_rsdpg_256_balanced_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192s
+               return OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_256_fast)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_256_fast
-               return OQS_SIG_cross_rsdpg_256_fast_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192f
+               return OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_cross_rsdpg_256_small)) {
-#ifdef OQS_ENABLE_SIG_cross_rsdpg_256_small
-               return OQS_SIG_cross_rsdpg_256_small_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256s
+               return OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Is)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_Is
-               return OQS_SIG_uov_ov_Is_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256f
+               return OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Ip)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_Ip
-               return OQS_SIG_uov_ov_Ip_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_III)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_III
-               return OQS_SIG_uov_ov_III_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_V)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_V
-               return OQS_SIG_uov_ov_V_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Is_pkc)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_Is_pkc
-               return OQS_SIG_uov_ov_Is_pkc_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Ip_pkc)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_Ip_pkc
-               return OQS_SIG_uov_ov_Ip_pkc_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_III_pkc)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_III_pkc
-               return OQS_SIG_uov_ov_III_pkc_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_V_pkc)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_V_pkc
-               return OQS_SIG_uov_ov_V_pkc_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128s
+               return OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Is_pkc_skc)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_Is_pkc_skc
-               return OQS_SIG_uov_ov_Is_pkc_skc_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128f
+               return OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_Ip_pkc_skc)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_Ip_pkc_skc
-               return OQS_SIG_uov_ov_Ip_pkc_skc_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192s
+               return OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_III_pkc_skc)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_III_pkc_skc
-               return OQS_SIG_uov_ov_III_pkc_skc_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192f
+               return OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_uov_ov_V_pkc_skc)) {
-#ifdef OQS_ENABLE_SIG_uov_ov_V_pkc_skc
-               return OQS_SIG_uov_ov_V_pkc_skc_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256s
+               return OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_4)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_4
-               return OQS_SIG_snova_SNOVA_24_5_4_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256f
+               return OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_4_SHAKE)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_4_SHAKE
-               return OQS_SIG_snova_SNOVA_24_5_4_SHAKE_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128s
+               return OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_4_esk)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_4_esk
-               return OQS_SIG_snova_SNOVA_24_5_4_esk_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128f
+               return OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_4_SHAKE_esk)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_4_SHAKE_esk
-               return OQS_SIG_snova_SNOVA_24_5_4_SHAKE_esk_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192s
+               return OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_37_17_2)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_37_17_2
-               return OQS_SIG_snova_SNOVA_37_17_2_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192f
+               return OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_25_8_3)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_25_8_3
-               return OQS_SIG_snova_SNOVA_25_8_3_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256s
+               return OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_56_25_2)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_56_25_2
-               return OQS_SIG_snova_SNOVA_56_25_2_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256f
+               return OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_49_11_3)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_49_11_3
-               return OQS_SIG_snova_SNOVA_49_11_3_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128s
+               return OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_37_8_4)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_37_8_4
-               return OQS_SIG_snova_SNOVA_37_8_4_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128f
+               return OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_24_5_5)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_24_5_5
-               return OQS_SIG_snova_SNOVA_24_5_5_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192s
+               return OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_60_10_4)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_60_10_4
-               return OQS_SIG_snova_SNOVA_60_10_4_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192f
+               return OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_new();
 #else
                return NULL;
 #endif
-
-       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_snova_SNOVA_29_6_5)) {
-#ifdef OQS_ENABLE_SIG_snova_SNOVA_29_6_5
-               return OQS_SIG_snova_SNOVA_29_6_5_new();
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256s)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256s
+               return OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_new();
 #else
                return NULL;
 #endif
-///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_NEW_CASE_END
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256f)) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256f
+               return OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_new();
+#else
+               return NULL;
+#endif
+               ///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_SIGNEW_END
                // EDIT-WHEN-ADDING-SIG
        } else {
                return NULL;
index d77787fa9d2c5e05e052da498392ffe13971175d..f3631d26bf2886d41a4ecc410b0269a214c82ef5 100644 (file)
@@ -169,11 +169,330 @@ extern "C" {
 /** Algorithm identifier for SNOVA_29_6_5 */
 #define OQS_SIG_alg_snova_SNOVA_29_6_5 "SNOVA_29_6_5"
 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALG_IDENTIFIER_END
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGID_START
+/** Algorithm identifier for slh_dsa_pure_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_pure_sha2_128s "SLH_DSA_PURE_SHA2_128S"
+/** Algorithm identifier for slh_dsa_pure_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_pure_sha2_128f "SLH_DSA_PURE_SHA2_128F"
+/** Algorithm identifier for slh_dsa_pure_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_pure_sha2_192s "SLH_DSA_PURE_SHA2_192S"
+/** Algorithm identifier for slh_dsa_pure_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_pure_sha2_192f "SLH_DSA_PURE_SHA2_192F"
+/** Algorithm identifier for slh_dsa_pure_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_pure_sha2_256s "SLH_DSA_PURE_SHA2_256S"
+/** Algorithm identifier for slh_dsa_pure_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_pure_sha2_256f "SLH_DSA_PURE_SHA2_256F"
+/** Algorithm identifier for slh_dsa_pure_shake_128s */
+#define OQS_SIG_alg_slh_dsa_pure_shake_128s "SLH_DSA_PURE_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_pure_shake_128f */
+#define OQS_SIG_alg_slh_dsa_pure_shake_128f "SLH_DSA_PURE_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_pure_shake_192s */
+#define OQS_SIG_alg_slh_dsa_pure_shake_192s "SLH_DSA_PURE_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_pure_shake_192f */
+#define OQS_SIG_alg_slh_dsa_pure_shake_192f "SLH_DSA_PURE_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_pure_shake_256s */
+#define OQS_SIG_alg_slh_dsa_pure_shake_256s "SLH_DSA_PURE_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_pure_shake_256f */
+#define OQS_SIG_alg_slh_dsa_pure_shake_256f "SLH_DSA_PURE_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128s "SLH_DSA_SHA2_224_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128f "SLH_DSA_SHA2_224_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192s "SLH_DSA_SHA2_224_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192f "SLH_DSA_SHA2_224_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256s "SLH_DSA_SHA2_224_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256f "SLH_DSA_SHA2_224_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128s "SLH_DSA_SHA2_224_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128f "SLH_DSA_SHA2_224_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192s "SLH_DSA_SHA2_224_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192f "SLH_DSA_SHA2_224_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256s "SLH_DSA_SHA2_224_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha2_224_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256f "SLH_DSA_SHA2_224_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128s "SLH_DSA_SHA2_256_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128f "SLH_DSA_SHA2_256_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192s "SLH_DSA_SHA2_256_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192f "SLH_DSA_SHA2_256_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256s "SLH_DSA_SHA2_256_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256f "SLH_DSA_SHA2_256_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128s "SLH_DSA_SHA2_256_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128f "SLH_DSA_SHA2_256_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192s "SLH_DSA_SHA2_256_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192f "SLH_DSA_SHA2_256_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256s "SLH_DSA_SHA2_256_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha2_256_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256f "SLH_DSA_SHA2_256_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128s "SLH_DSA_SHA2_384_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128f "SLH_DSA_SHA2_384_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192s "SLH_DSA_SHA2_384_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192f "SLH_DSA_SHA2_384_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256s "SLH_DSA_SHA2_384_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256f "SLH_DSA_SHA2_384_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128s "SLH_DSA_SHA2_384_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128f "SLH_DSA_SHA2_384_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192s "SLH_DSA_SHA2_384_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192f "SLH_DSA_SHA2_384_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256s "SLH_DSA_SHA2_384_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha2_384_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256f "SLH_DSA_SHA2_384_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128s "SLH_DSA_SHA2_512_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128f "SLH_DSA_SHA2_512_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192s "SLH_DSA_SHA2_512_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192f "SLH_DSA_SHA2_512_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256s "SLH_DSA_SHA2_512_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256f "SLH_DSA_SHA2_512_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128s "SLH_DSA_SHA2_512_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128f "SLH_DSA_SHA2_512_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192s "SLH_DSA_SHA2_512_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192f "SLH_DSA_SHA2_512_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256s "SLH_DSA_SHA2_512_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha2_512_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256f "SLH_DSA_SHA2_512_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128s "SLH_DSA_SHA2_512_224_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128f "SLH_DSA_SHA2_512_224_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192s "SLH_DSA_SHA2_512_224_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192f "SLH_DSA_SHA2_512_224_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256s "SLH_DSA_SHA2_512_224_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256f "SLH_DSA_SHA2_512_224_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128s "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128f "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192s "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192f "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256s "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha2_512_224_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256f "SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128s "SLH_DSA_SHA2_512_256_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128f "SLH_DSA_SHA2_512_256_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192s "SLH_DSA_SHA2_512_256_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192f "SLH_DSA_SHA2_512_256_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256s "SLH_DSA_SHA2_512_256_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256f "SLH_DSA_SHA2_512_256_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128s "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128f "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192s "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192f "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256s "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha2_512_256_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256f "SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128s "SLH_DSA_SHA3_224_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128f "SLH_DSA_SHA3_224_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192s "SLH_DSA_SHA3_224_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192f "SLH_DSA_SHA3_224_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256s "SLH_DSA_SHA3_224_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256f "SLH_DSA_SHA3_224_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128s "SLH_DSA_SHA3_224_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128f "SLH_DSA_SHA3_224_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192s "SLH_DSA_SHA3_224_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192f "SLH_DSA_SHA3_224_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256s "SLH_DSA_SHA3_224_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha3_224_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256f "SLH_DSA_SHA3_224_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128s "SLH_DSA_SHA3_256_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128f "SLH_DSA_SHA3_256_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192s "SLH_DSA_SHA3_256_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192f "SLH_DSA_SHA3_256_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256s "SLH_DSA_SHA3_256_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256f "SLH_DSA_SHA3_256_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128s "SLH_DSA_SHA3_256_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128f "SLH_DSA_SHA3_256_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192s "SLH_DSA_SHA3_256_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192f "SLH_DSA_SHA3_256_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256s "SLH_DSA_SHA3_256_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha3_256_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256f "SLH_DSA_SHA3_256_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128s "SLH_DSA_SHA3_384_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128f "SLH_DSA_SHA3_384_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192s "SLH_DSA_SHA3_384_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192f "SLH_DSA_SHA3_384_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256s "SLH_DSA_SHA3_384_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256f "SLH_DSA_SHA3_384_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128s "SLH_DSA_SHA3_384_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128f "SLH_DSA_SHA3_384_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192s "SLH_DSA_SHA3_384_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192f "SLH_DSA_SHA3_384_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256s "SLH_DSA_SHA3_384_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha3_384_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256f "SLH_DSA_SHA3_384_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128s "SLH_DSA_SHA3_512_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128f "SLH_DSA_SHA3_512_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192s "SLH_DSA_SHA3_512_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192f "SLH_DSA_SHA3_512_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256s "SLH_DSA_SHA3_512_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256f "SLH_DSA_SHA3_512_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128s "SLH_DSA_SHA3_512_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128f "SLH_DSA_SHA3_512_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192s "SLH_DSA_SHA3_512_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192f "SLH_DSA_SHA3_512_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256s "SLH_DSA_SHA3_512_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_sha3_512_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256f "SLH_DSA_SHA3_512_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128s "SLH_DSA_SHAKE_128_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128f "SLH_DSA_SHAKE_128_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192s "SLH_DSA_SHAKE_128_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192f "SLH_DSA_SHAKE_128_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256s "SLH_DSA_SHAKE_128_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256f "SLH_DSA_SHAKE_128_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128s "SLH_DSA_SHAKE_128_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128f "SLH_DSA_SHAKE_128_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192s "SLH_DSA_SHAKE_128_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192f "SLH_DSA_SHAKE_128_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256s "SLH_DSA_SHAKE_128_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_shake_128_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256f "SLH_DSA_SHAKE_128_PREHASH_SHAKE_256F"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_sha2_128s */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128s "SLH_DSA_SHAKE_256_PREHASH_SHA2_128S"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_sha2_128f */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128f "SLH_DSA_SHAKE_256_PREHASH_SHA2_128F"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_sha2_192s */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192s "SLH_DSA_SHAKE_256_PREHASH_SHA2_192S"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_sha2_192f */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192f "SLH_DSA_SHAKE_256_PREHASH_SHA2_192F"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_sha2_256s */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256s "SLH_DSA_SHAKE_256_PREHASH_SHA2_256S"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_sha2_256f */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256f "SLH_DSA_SHAKE_256_PREHASH_SHA2_256F"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_shake_128s */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128s "SLH_DSA_SHAKE_256_PREHASH_SHAKE_128S"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_shake_128f */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128f "SLH_DSA_SHAKE_256_PREHASH_SHAKE_128F"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_shake_192s */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192s "SLH_DSA_SHAKE_256_PREHASH_SHAKE_192S"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_shake_192f */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192f "SLH_DSA_SHAKE_256_PREHASH_SHAKE_192F"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_shake_256s */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256s "SLH_DSA_SHAKE_256_PREHASH_SHAKE_256S"
+/** Algorithm identifier for slh_dsa_shake_256_prehash_shake_256f */
+#define OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256f "SLH_DSA_SHAKE_256_PREHASH_SHAKE_256F"
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGID_END
 // EDIT-WHEN-ADDING-SIG
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGS_LENGTH_START
+
+/** Number of algorithm identifiers above. */
+#define OQS_SIG_SLH_DSA_algs_length 156
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGS_LENGTH_END
 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALGS_LENGTH_START
 
 /** Number of algorithm identifiers above. */
-#define OQS_SIG_algs_length 68
+#define OQS_SIG_algs_length 68 + OQS_SIG_SLH_DSA_algs_length
 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALGS_LENGTH_END
 
 /**
@@ -446,6 +765,11 @@ OQS_API bool OQS_SIG_supports_ctx_str(const char *alg_name);
 #include <oqs/sig_snova.h>
 #endif /* OQS_ENABLE_SIG_SNOVA */
 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_INCLUDE_END
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_INCLUDE_START
+#ifdef OQS_ENABLE_SIG_SLH_DSA
+#include <oqs/sig_slh_dsa.h>
+#endif /* OQS_ENABLE_SIG_SLH_DSA */
+///// OQS_COPY_FROM_SLH_DSA_FRAGMENT_INCLUDE_END
 // EDIT-WHEN-ADDING-SIG
 
 #if defined(__cplusplus)
diff --git a/src/sig/slh_dsa/CMakeLists.txt b/src/sig/slh_dsa/CMakeLists.txt
new file mode 100644 (file)
index 0000000..90157ed
--- /dev/null
@@ -0,0 +1,190 @@
+# SPDX-License-Identifier: MIT
+
+set(_SLH_DSA_OBJS "")
+
+if (OQS_ENABLE_SIG_SLH_DSA)
+       add_library(slh_dsa_c OBJECT
+                   slh_dsa_c/sha2_256.c
+                   slh_dsa_c/sha2_512.c
+                   slh_dsa_c/sha3_api.c
+                   slh_dsa_c/sha3_f1600.c
+                   slh_dsa_c/slh_dsa.c
+                   slh_dsa_c/slh_prehash.c
+                   slh_dsa_c/slh_sha2.c
+                   slh_dsa_c/slh_shake.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_128f.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_128s.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_192f.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_192s.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_256f.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_256s.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_128f.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_128s.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_192f.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_192s.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_256f.c
+                   wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_256s.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_128f.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_128s.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_192f.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_192s.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_256f.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_256s.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_128f.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_128s.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_192f.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_192s.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_256f.c
+                   wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_256s.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_128f.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_128s.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_192f.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_192s.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_256f.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_256s.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_128f.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_128s.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_192f.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_192s.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_256f.c
+                   wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_256s.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_128f.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_128s.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_192f.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_192s.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_256f.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_256s.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_128f.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_128s.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_192f.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_192s.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_256f.c
+                   wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_256s.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_128f.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_128s.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_192f.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_192s.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_256f.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_256s.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_128f.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_128s.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_192f.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_192s.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_256f.c
+                   wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_256s.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_128f.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_128s.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_192f.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_192s.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_256f.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_256s.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_128f.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_128s.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_192f.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_192s.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_256f.c
+                   wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_256s.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_128f.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_128s.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_192f.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_192s.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_256f.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_256s.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_128f.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_128s.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_192f.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_192s.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_256f.c
+                   wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_256s.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_128f.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_128s.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_192f.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_192s.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_256f.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_256s.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_128f.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_128s.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_192f.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_192s.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_256f.c
+                   wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_256s.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_128f.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_128s.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_192f.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_192s.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_256f.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_256s.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_128f.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_128s.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_192f.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_192s.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_256f.c
+                   wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_256s.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_128f.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_128s.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_192f.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_192s.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_256f.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_256s.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_128f.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_128s.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_192f.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_192s.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_256f.c
+                   wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_256s.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_128f.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_128s.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_192f.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_192s.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_256f.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_256s.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_128f.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_128s.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_192f.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_192s.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_256f.c
+                   wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_256s.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_128f.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_128s.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_192f.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_192s.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_256f.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_256s.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_128f.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_128s.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_192f.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_192s.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_256f.c
+                   wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_256s.c
+                   wrappers/pure/slh_dsa_pure_sha2_128f.c
+                   wrappers/pure/slh_dsa_pure_sha2_128s.c
+                   wrappers/pure/slh_dsa_pure_sha2_192f.c
+                   wrappers/pure/slh_dsa_pure_sha2_192s.c
+                   wrappers/pure/slh_dsa_pure_sha2_256f.c
+                   wrappers/pure/slh_dsa_pure_sha2_256s.c
+                   wrappers/pure/slh_dsa_pure_shake_128f.c
+                   wrappers/pure/slh_dsa_pure_shake_128s.c
+                   wrappers/pure/slh_dsa_pure_shake_192f.c
+                   wrappers/pure/slh_dsa_pure_shake_192s.c
+                   wrappers/pure/slh_dsa_pure_shake_256f.c
+                   wrappers/pure/slh_dsa_pure_shake_256s.c
+                   )
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/slh_dsa_c)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/pure)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha2_224)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha2_256)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha2_384)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha2_512)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha2_512_224)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha2_512_256)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha3_224)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha3_256)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha3_384)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_sha3_512)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_shake_128)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_shake_256)
+    
+    set(_SLH_DSA_OBJS ${_SLH_DSA_OBJS} $<TARGET_OBJECTS:slh_dsa_c>)
+endif()
+
+set(SLH_DSA_OBJS ${_SLH_DSA_OBJS} PARENT_SCOPE)
\ No newline at end of file
diff --git a/src/sig/slh_dsa/sig_slh_dsa.h b/src/sig/slh_dsa/sig_slh_dsa.h
new file mode 100644 (file)
index 0000000..f56ee2e
--- /dev/null
@@ -0,0 +1,2192 @@
+
+// SPDX-License-Identifier: MIT
+
+#ifndef OQS_SIG_SLH_DSA_H
+#define OQS_SIG_SLH_DSA_H
+
+#include <oqs/oqs.h>
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_128s)
+#define OQS_SIG_slh_dsa_pure_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_pure_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_pure_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_128s)
+#define OQS_SIG_slh_dsa_pure_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_pure_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_pure_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_128f)
+#define OQS_SIG_slh_dsa_pure_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_pure_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_pure_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_128f)
+#define OQS_SIG_slh_dsa_pure_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_pure_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_pure_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_192s)
+#define OQS_SIG_slh_dsa_pure_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_pure_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_pure_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_192s)
+#define OQS_SIG_slh_dsa_pure_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_pure_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_pure_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_192f)
+#define OQS_SIG_slh_dsa_pure_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_pure_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_pure_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_192f)
+#define OQS_SIG_slh_dsa_pure_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_pure_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_pure_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_256s)
+#define OQS_SIG_slh_dsa_pure_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_pure_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_pure_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_256s)
+#define OQS_SIG_slh_dsa_pure_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_pure_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_pure_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_256f)
+#define OQS_SIG_slh_dsa_pure_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_pure_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_pure_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_256f)
+#define OQS_SIG_slh_dsa_pure_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_pure_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_pure_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128s)
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128s)
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_length_public_key 32
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_length_secret_key 64
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_length_signature 7856
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128f)
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128f)
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_length_public_key 32
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_length_secret_key 64
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_length_signature 17088
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192s)
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192s)
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_length_public_key 48
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_length_secret_key 96
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_length_signature 16224
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192f)
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192f)
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_length_public_key 48
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_length_secret_key 96
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_length_signature 35664
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256s)
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256s)
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_length_public_key 64
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_length_secret_key 128
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_length_signature 29792
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256f)
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256f)
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_length_public_key 64
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_length_secret_key 128
+#define OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_length_signature 49856
+
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+
+#endif
diff --git a/src/sig/slh_dsa/slh_dsa_c/cbmc.h b/src/sig/slh_dsa/slh_dsa_c/cbmc.h
new file mode 100644 (file)
index 0000000..452390f
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) The mlkem-native project authors
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+#ifndef SLH_CBMC_H
+#define SLH_CBMC_H
+/***************************************************
+ * Basic replacements for __CPROVER_XXX contracts
+ ***************************************************/
+
+#ifndef CBMC
+
+#define __contract__(x)
+#define __loop__(x)
+
+#else /* !CBMC */
+
+#define __contract__(x) x
+#define __loop__(x) x
+
+/* https://diffblue.github.io/cbmc/contracts-assigns.html */
+#define assigns(...) __CPROVER_assigns(__VA_ARGS__)
+
+/* https://diffblue.github.io/cbmc/contracts-requires-ensures.html */
+#define requires(...) __CPROVER_requires(__VA_ARGS__)
+#define ensures(...) __CPROVER_ensures(__VA_ARGS__)
+/* https://diffblue.github.io/cbmc/contracts-loops.html */
+#define invariant(...) __CPROVER_loop_invariant(__VA_ARGS__)
+#define decreases(...) __CPROVER_decreases(__VA_ARGS__)
+/* cassert to avoid confusion with in-built assert */
+#define cassert(x) __CPROVER_assert(x, "cbmc assertion failed")
+#define assume(...) __CPROVER_assume(__VA_ARGS__)
+
+/***************************************************
+ * Macros for "expression" forms that may appear
+ * _inside_ top-level contracts.
+ ***************************************************/
+
+/*
+ * function return value - useful inside ensures
+ * https://diffblue.github.io/cbmc/contracts-functions.html
+ */
+#define return_value (__CPROVER_return_value)
+
+/*
+ * assigns l-value targets
+ * https://diffblue.github.io/cbmc/contracts-assigns.html
+ */
+#define object_whole(...) __CPROVER_object_whole(__VA_ARGS__)
+#define memory_slice(...) __CPROVER_object_upto(__VA_ARGS__)
+#define same_object(...) __CPROVER_same_object(__VA_ARGS__)
+
+/*
+ * Pointer-related predicates
+ * https://diffblue.github.io/cbmc/contracts-memory-predicates.html
+ */
+#define memory_no_alias(...) __CPROVER_is_fresh(__VA_ARGS__)
+#define readable(...) __CPROVER_r_ok(__VA_ARGS__)
+#define writeable(...) __CPROVER_w_ok(__VA_ARGS__)
+
+/*
+ * History variables
+ * https://diffblue.github.io/cbmc/contracts-history-variables.html
+ */
+#define old(...) __CPROVER_old(__VA_ARGS__)
+#define loop_entry(...) __CPROVER_loop_entry(__VA_ARGS__)
+
+/*
+ * Quantifiers
+ * Note that the range on qvar is _exclusive_ between qvar_lb .. qvar_ub
+ * https://diffblue.github.io/cbmc/contracts-quantifiers.html
+ */
+
+/*
+ * Prevent clang-format from corrupting CBMC's special ==> operator
+ */
+/* clang-format off */
+#define forall(qvar, qvar_lb, qvar_ub, predicate)                 \
+  __CPROVER_forall                                                \
+  {                                                               \
+    unsigned qvar;                                                \
+    ((qvar_lb) <= (qvar) && (qvar) < (qvar_ub)) ==> (predicate)   \
+  }
+
+#define EXISTS(qvar, qvar_lb, qvar_ub, predicate)         \
+  __CPROVER_exists                                              \
+  {                                                             \
+    unsigned qvar;                                              \
+    ((qvar_lb) <= (qvar) && (qvar) < (qvar_ub)) && (predicate)  \
+  }
+/* clang-format on */
+
+/***************************************************
+ * Convenience macros for common contract patterns
+ ***************************************************/
+
+/*
+ * Boolean-value predidate that asserts that "all values of array_var are in
+ * range value_lb (inclusive) .. value_ub (exclusive)"
+ * Example:
+ *  array_bound(a->coeffs, 0, SLHEM_N, 0, SLHEM_Q)
+ * expands to
+ *  __CPROVER_forall { int k; (0 <= k && k <= SLHEM_N-1) ==> (
+ *  0 <= a->coeffs[k]) && a->coeffs[k] < SLHEM_Q)) }
+ */
+
+/*
+ * Prevent clang-format from corrupting CBMC's special ==> operator
+ */
+/* clang-format off */
+#define CBMC_CONCAT_(left, right) left##right
+#define CBMC_CONCAT(left, right) CBMC_CONCAT_(left, right)
+
+#define array_bound_core(qvar, qvar_lb, qvar_ub, array_var,            \
+                         value_lb, value_ub)                           \
+  __CPROVER_forall                                                     \
+  {                                                                    \
+    unsigned qvar;                                                     \
+    ((qvar_lb) <= (qvar) && (qvar) < (qvar_ub)) ==>                    \
+        (((int)(value_lb) <= ((array_var)[(qvar)])) &&                \
+         (((array_var)[(qvar)]) < (int)(value_ub)))                   \
+  }
+
+#define array_bound(array_var, qvar_lb, qvar_ub, value_lb, value_ub) \
+  array_bound_core(CBMC_CONCAT(_cbmc_idx, __LINE__), (qvar_lb),      \
+      (qvar_ub), (array_var), (value_lb), (value_ub))
+/* clang-format on */
+
+/* Wrapper around array_bound operating on absolute values.
+ *
+ * The absolute value bound `k` is exclusive.
+ *
+ * Note that since the lower bound in array_bound is inclusive, we have to
+ * raise it by 1 here.
+ */
+#define array_abs_bound(arr, lb, ub, k) \
+  array_bound((arr), (lb), (ub), -((int)(k)) + 1, (k))
+
+#endif /* CBMC */
+
+#endif /* !SLH_CBMC_H */
diff --git a/src/sig/slh_dsa/slh_dsa_c/integration/liboqs/META.yml b/src/sig/slh_dsa/slh_dsa_c/integration/liboqs/META.yml
new file mode 100644 (file)
index 0000000..7a5adac
--- /dev/null
@@ -0,0 +1,95 @@
+algDetails:
+  algVersion: FIPS205
+  eufCMA: 'true'
+  sufCMA: 'false'
+
+sources:
+  integration/liboqs/META.yml
+  plat_local.h
+  sha2_256.c
+  sha2_512.c
+  sha2_api.h
+  sha3_api.c
+  sha3_api.h
+  sha3_f1600.c
+  slh_adrs.h
+  slh_dsa.c
+  slh_dsa.h
+  slh_param.h
+  slh_prehash.c
+  slh_prehash.h
+  slh_sha2.c
+  slh_shake.c
+  slh_var.h
+  slh_sys.h
+  cbmc.h
+
+paramSets:
+  -
+    name: 128s
+    pkSize: 32
+    skSize: 64
+    sigSize: 7856
+    claimedNISTLevel: 1
+  -
+    name: 128f
+    pkSize: 32
+    skSize: 64
+    sigSize: 17088
+    claimedNISTLevel: 1
+  -  
+    name: 192s
+    pkSize: 48
+    skSize: 96
+    sigSize: 16224
+    claimedNISTLevel: 3
+  -  
+    name: 192f
+    pkSize: 48
+    skSize: 96
+    sigSize: 35664
+    claimedNISTLevel: 3
+  -  
+    name: 256s
+    pkSize: 64
+    skSize: 128
+    sigSize: 29792
+    claimedNISTLevel: 5
+  -  
+    name: 256f
+    pkSize: 64
+    skSize: 128
+    sigSize: 49856
+    claimedNISTLevel: 5
+
+hashAlgs:
+  -
+    name: sha2
+  -
+    name: shake
+
+prehashHashAlgs:
+  -
+    name: sha2_224
+  -
+    name: sha2_256
+  -
+    name: sha2_384
+  -
+    name: sha2_512
+  -
+    name: sha2_512/224
+  -
+    name: sha2_512/256
+  -
+    name: sha3_224
+  -
+    name: sha3_256
+  -
+    name: sha3_384
+  -
+    name: sha3_512
+  -
+    name: shake_128
+  -
+    name: shake_256
\ No newline at end of file
diff --git a/src/sig/slh_dsa/slh_dsa_c/plat_local.h b/src/sig/slh_dsa/slh_dsa_c/plat_local.h
new file mode 100644 (file)
index 0000000..f1bf1e3
--- /dev/null
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === Localization affecting all implementations can be inserted here. */
+
+#ifndef _PLAT_LOCAL_H_
+#define _PLAT_LOCAL_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stddef.h>
+#include <stdint.h>
+#include "slh_sys.h"
+
+#ifndef PLAT_VERS_STR
+#define PLAT_VERS_STR "dev version"
+#define PLAT_VERS_MAJ 0
+#define PLAT_VERS_MIN 0
+#endif
+
+  /* === platform detection logic */
+
+#ifndef PLAT_XLEN
+
+#if defined(__riscv)
+
+#define PLAT_XLEN __riscv_xlen
+#if defined(__riscv_vector)
+#define PLAT_ARCH_RVV
+#define PLAT_ARCH_STR "PLAT_ARCH_RVV"
+#elif (__riscv_xlen == 32)
+#define PLAT_ARCH_RV32
+#define PLAT_ARCH_STR "PLAT_ARCH_RV32"
+#else
+#define PLAT_ARCH_RV64
+#define PLAT_ARCH_STR "PLAT_ARCH_RV64"
+#endif
+
+#elif defined(__arm__)
+#define PLAT_XLEN 32
+#define PLAT_ARCH_STR "PLAT_ARCH_ARM32"
+#define PLAT_ARCH_ARM32
+
+#elif defined(__aarch64__)
+#define PLAT_XLEN 64
+#define PLAT_ARCH_STR "PLAT_ARCH_ARM64"
+#define PLAT_ARCH_ARM64
+
+#elif defined(__i386__)
+#define PLAT_XLEN 32
+#define PLAT_ARCH_STR "PLAT_ARCH_IA32"
+#define PLAT_ARCH_IA32
+
+#elif defined(__x86_64__)
+#define PLAT_XLEN 64
+#define PLAT_ARCH_STR "PLAT_ARCH_X64"
+#define PLAT_ARCH_X64
+
+#elif (__WORDSIZE == 32)
+#define PLAT_XLEN 32
+#define PLAT_ARCH_STR "PLAT_ARCH_GEN32"
+#define PLAT_ARCH_GEN32
+
+#else
+/* fallback for everything */
+#define PLAT_XLEN 64
+#define PLAT_ARCH_STR "PLAT_ARCH_GEN64"
+#define PLAT_ARCH_GEN64
+#endif
+
+/* PLAT_XLEN signals that the rest of the macros are defined too */
+#endif
+
+/* === Assume-Assert checks */
+
+/* No-op for production */
+#ifndef __CPROVER__
+
+#ifndef XDEBUG
+#define XASSERT(x)
+#define XASSUME(x)
+#define XTMPVAR(x)
+
+/* Runtime checks in debug build */
+#else
+#include <assert.h>
+#define XASSERT(x) assert(x)
+#define XASSUME(x) assert(x)
+#define XTMPVAR(x) x
+/* XDEBUG */
+#endif
+
+/* For CBMC (formal checks) */
+#else
+#include <assert.h>
+#include <stdio.h>
+#define XASSERT(x) assert(x)
+#define XASSUME(x) __CPROVER_assume(x)
+#define XTMPVAR(x) x
+#define XPROOFS
+#endif /* __CPROVER__ */
+
+  /* revert if not big endian */
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+/* nop */
+#define rev8_be32(x) (x)
+#else
+/* RISC-V: grev(x, 0x18) or rev8 */
+
+static SLH_INLINE uint32_t rev8_be32(uint32_t x)
+{
+  return ((x & 0xFF000000) >> 24) | ((x & 0x00FF0000) >> 8) |
+         ((x & 0x0000FF00) << 8) | ((x & 0x000000FF) << 24);
+}
+#endif
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#define rev8_be64(x) (x)
+#else
+/* RISC-V: grev(x, 0x38) or rev8(x) */
+static SLH_INLINE uint64_t rev8_be64(uint64_t x)
+{
+  return (x << 56) | ((x & 0x000000000000FF00LL) << 40) |
+         ((x & 0x0000000000FF0000LL) << 24) |
+         ((x & 0x00000000FF000000LL) << 8) | ((x & 0x000000FF00000000LL) >> 8) |
+         ((x & 0x0000FF0000000000LL) >> 24) |
+         ((x & 0x00FF000000000000LL) >> 40) | (x >> 56);
+}
+#endif
+
+  /* rotate left */
+
+  static SLH_INLINE uint32_t rol32(uint32_t x, uint32_t n)
+  {
+    return (x << n) | (x >> (32 - n));
+  }
+
+  static SLH_INLINE uint64_t rol64(uint64_t x, uint64_t n)
+  {
+    return (x << n) | (x >> (64 - n));
+  }
+
+  /* rotate right (RISC-V ROR or RORI) */
+
+  static SLH_INLINE uint32_t ror32(uint32_t x, uint32_t n)
+  {
+    return (x >> n) | (x << (32 - n));
+  }
+
+  static SLH_INLINE uint64_t ror64(uint64_t x, uint64_t n)
+  {
+    return (x >> n) | (x << (64 - n));
+  }
+
+  /* and with negate (RISC-V ANDN) */
+
+  static SLH_INLINE uint32_t andn32(uint32_t x, uint32_t y) { return x & ~y; }
+
+  static SLH_INLINE uint64_t andn64(uint64_t x, uint64_t y) { return x & ~y; }
+
+  /* little-endian loads and stores (unaligned) */
+
+  static SLH_INLINE uint16_t get16u_le(const uint8_t *v)
+  {
+    return (((uint16_t)v[1]) << 8) | ((uint16_t)v[0]);
+  }
+
+  static SLH_INLINE void put16u_le(uint8_t *v, uint16_t x)
+  {
+    v[0] = x;
+    v[1] = x >> 8;
+  }
+
+  static SLH_INLINE uint32_t get32u_le(const uint8_t *v)
+  {
+    return ((uint32_t)v[0]) | (((uint32_t)v[1]) << 8) |
+           (((uint32_t)v[2]) << 16) | (((uint32_t)v[3]) << 24);
+  }
+
+  static SLH_INLINE void put32u_le(uint8_t *v, uint32_t x)
+  {
+    v[0] = x;
+    v[1] = x >> 8;
+    v[2] = x >> 16;
+    v[3] = x >> 24;
+  }
+
+  static SLH_INLINE uint64_t get64u_le(const uint8_t *v)
+  {
+    return ((uint64_t)v[0]) | (((uint64_t)v[1]) << 8) |
+           (((uint64_t)v[2]) << 16) | (((uint64_t)v[3]) << 24) |
+           (((uint64_t)v[4]) << 32) | (((uint64_t)v[5]) << 40) |
+           (((uint64_t)v[6]) << 48) | (((uint64_t)v[7]) << 56);
+  }
+
+  static SLH_INLINE void put64u_le(uint8_t *v, uint64_t x)
+  {
+    v[0] = x;
+    v[1] = x >> 8;
+    v[2] = x >> 16;
+    v[3] = x >> 24;
+    v[4] = x >> 32;
+    v[5] = x >> 40;
+    v[6] = x >> 48;
+    v[7] = x >> 56;
+  }
+
+  /* big-endian loads and stores (unaligned) */
+
+  static SLH_INLINE uint16_t get16u_be(const uint8_t *v)
+  {
+    return (((uint16_t)v[0]) << 8) | ((uint16_t)v[1]);
+  }
+
+  static SLH_INLINE void put16u_be(uint8_t *v, uint16_t x)
+  {
+    v[0] = x >> 8;
+    v[1] = x;
+  }
+
+  static SLH_INLINE uint32_t get32u_be(const uint8_t *v)
+  {
+    return (((uint32_t)v[0]) << 24) | (((uint32_t)v[1]) << 16) |
+           (((uint32_t)v[2]) << 8) | ((uint32_t)v[3]);
+  }
+
+  static SLH_INLINE void put32u_be(uint8_t *v, uint32_t x)
+  {
+    v[0] = x >> 24;
+    v[1] = x >> 16;
+    v[2] = x >> 8;
+    v[3] = x;
+  }
+
+  static SLH_INLINE uint64_t get64u_be(const uint8_t *v)
+  {
+    return (((uint64_t)v[0]) << 56) | (((uint64_t)v[1]) << 48) |
+           (((uint64_t)v[2]) << 40) | (((uint64_t)v[3]) << 32) |
+           (((uint64_t)v[4]) << 24) | (((uint64_t)v[5]) << 16) |
+           (((uint64_t)v[6]) << 8) | ((uint64_t)v[7]);
+  }
+
+  static SLH_INLINE void put64u_be(uint8_t *v, uint64_t x)
+  {
+    v[0] = x >> 56;
+    v[1] = x >> 48;
+    v[2] = x >> 40;
+    v[3] = x >> 32;
+    v[4] = x >> 24;
+    v[5] = x >> 16;
+    v[6] = x >> 8;
+    v[7] = x;
+  }
+
+#ifdef __cplusplus
+}
+#endif
+
+/* _PLAT_LOCAL_H_ */
+#endif
diff --git a/src/sig/slh_dsa/slh_dsa_c/sha2_256.c b/src/sig/slh_dsa/slh_dsa_c/sha2_256.c
new file mode 100644 (file)
index 0000000..1102f0e
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 180-4 SHA2-256 / Portable C Implementation */
+
+#include <string.h>
+#include "plat_local.h"
+#include "sha2_api.h"
+
+#ifdef SLH_EXPERIMENTAL
+uint64_t sha2_256_compress_count = 0; /* instrumentation */
+#endif
+
+/* processing step, sets "d" and "h" as a function of all 8 inputs */
+/* and message schedule "mi", round constant "ki" */
+#define STEP_SHA256_R(a, b, c, d, e, f, g, h, mi, ki) \
+  {                                                   \
+    h += (g ^ (e & (f ^ g))) + mi + ki +              \
+         (ror32(e, 6) ^ ror32(e, 11) ^ ror32(e, 25)); \
+    d += h;                                           \
+    h += (((a | c) & b) | (c & a)) +                  \
+         (ror32(a, 2) ^ ror32(a, 13) ^ ror32(a, 22)); \
+  }
+
+/* keying step, sets x0 as a function of 4 inputs */
+#define STEP_SHA256_K(x0, x1, x9, xe)                       \
+  {                                                         \
+    x0 += x9 + (ror32(x1, 7) ^ ror32(x1, 18) ^ (x1 >> 3)) + \
+          (ror32(xe, 17) ^ ror32(xe, 19) ^ (xe >> 10));     \
+  }
+
+void sha2_256_compress(void *v)
+{
+  /* 4.2.2 SHA-224 and SHA-256 Constants */
+
+  const uint32_t ck[64] = {
+      0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1,
+      0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
+      0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786,
+      0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
+      0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147,
+      0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
+      0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B,
+      0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
+      0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A,
+      0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
+      0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2};
+
+  uint32_t a, b, c, d, e, f, g, h;
+  uint32_t m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, ma, mb, mc, md, me, mf;
+
+  uint32_t *sp = (uint32_t *)v;
+  const uint32_t *mp = sp + 8;
+  const uint32_t *kp = ck;
+
+#ifdef SLH_EXPERIMENTAL
+  sha2_256_compress_count++; /* instrumentation */
+#endif
+
+  a = sp[0] = rev8_be32(sp[0]);
+  b = sp[1] = rev8_be32(sp[1]);
+  c = sp[2] = rev8_be32(sp[2]);
+  d = sp[3] = rev8_be32(sp[3]);
+  e = sp[4] = rev8_be32(sp[4]);
+  f = sp[5] = rev8_be32(sp[5]);
+  g = sp[6] = rev8_be32(sp[6]);
+  h = sp[7] = rev8_be32(sp[7]);
+
+  /* load and reverse bytes (if needed) */
+
+  m0 = rev8_be32(mp[0]);
+  m1 = rev8_be32(mp[1]);
+  m2 = rev8_be32(mp[2]);
+  m3 = rev8_be32(mp[3]);
+  m4 = rev8_be32(mp[4]);
+  m5 = rev8_be32(mp[5]);
+  m6 = rev8_be32(mp[6]);
+  m7 = rev8_be32(mp[7]);
+  m8 = rev8_be32(mp[8]);
+  m9 = rev8_be32(mp[9]);
+  ma = rev8_be32(mp[10]);
+  mb = rev8_be32(mp[11]);
+  mc = rev8_be32(mp[12]);
+  md = rev8_be32(mp[13]);
+  me = rev8_be32(mp[14]);
+  mf = rev8_be32(mp[15]);
+
+  while (1)
+  {
+    STEP_SHA256_R(a, b, c, d, e, f, g, h, m0, kp[0]); /* rounds */
+    STEP_SHA256_R(h, a, b, c, d, e, f, g, m1, kp[1]);
+    STEP_SHA256_R(g, h, a, b, c, d, e, f, m2, kp[2]);
+    STEP_SHA256_R(f, g, h, a, b, c, d, e, m3, kp[3]);
+    STEP_SHA256_R(e, f, g, h, a, b, c, d, m4, kp[4]);
+    STEP_SHA256_R(d, e, f, g, h, a, b, c, m5, kp[5]);
+    STEP_SHA256_R(c, d, e, f, g, h, a, b, m6, kp[6]);
+    STEP_SHA256_R(b, c, d, e, f, g, h, a, m7, kp[7]);
+    STEP_SHA256_R(a, b, c, d, e, f, g, h, m8, kp[8]);
+    STEP_SHA256_R(h, a, b, c, d, e, f, g, m9, kp[9]);
+    STEP_SHA256_R(g, h, a, b, c, d, e, f, ma, kp[10]);
+    STEP_SHA256_R(f, g, h, a, b, c, d, e, mb, kp[11]);
+    STEP_SHA256_R(e, f, g, h, a, b, c, d, mc, kp[12]);
+    STEP_SHA256_R(d, e, f, g, h, a, b, c, md, kp[13]);
+    STEP_SHA256_R(c, d, e, f, g, h, a, b, me, kp[14]);
+    STEP_SHA256_R(b, c, d, e, f, g, h, a, mf, kp[15]);
+
+    if (kp == &ck[64 - 16])
+    {
+      break;
+    }
+    kp += 16;
+
+    STEP_SHA256_K(m0, m1, m9, me); /* message schedule */
+    STEP_SHA256_K(m1, m2, ma, mf);
+    STEP_SHA256_K(m2, m3, mb, m0);
+    STEP_SHA256_K(m3, m4, mc, m1);
+    STEP_SHA256_K(m4, m5, md, m2);
+    STEP_SHA256_K(m5, m6, me, m3);
+    STEP_SHA256_K(m6, m7, mf, m4);
+    STEP_SHA256_K(m7, m8, m0, m5);
+    STEP_SHA256_K(m8, m9, m1, m6);
+    STEP_SHA256_K(m9, ma, m2, m7);
+    STEP_SHA256_K(ma, mb, m3, m8);
+    STEP_SHA256_K(mb, mc, m4, m9);
+    STEP_SHA256_K(mc, md, m5, ma);
+    STEP_SHA256_K(md, me, m6, mb);
+    STEP_SHA256_K(me, mf, m7, mc);
+    STEP_SHA256_K(mf, m0, m8, md);
+  }
+
+  sp[0] = rev8_be32(sp[0] + a);
+  sp[1] = rev8_be32(sp[1] + b);
+  sp[2] = rev8_be32(sp[2] + c);
+  sp[3] = rev8_be32(sp[3] + d);
+  sp[4] = rev8_be32(sp[4] + e);
+  sp[5] = rev8_be32(sp[5] + f);
+  sp[6] = rev8_be32(sp[6] + g);
+  sp[7] = rev8_be32(sp[7] + h);
+}
+
+/* initialize */
+
+static void sha2_256_init_h0(sha2_256_t *sha, const uint8_t *h0)
+{
+  memcpy(sha->s, h0, 32);
+  sha->i = 0;
+  sha->len = 0;
+}
+
+void sha2_256_init(sha2_256_t *sha)
+{
+  /* SHA-256 initial values H0, Sect 5.3.3. */
+  const uint8_t sha2_256_h0[32] = {
+      0x6A, 0x09, 0xE6, 0x67, 0xBB, 0x67, 0xAE, 0x85, 0x3C, 0x6E, 0xF3,
+      0x72, 0xA5, 0x4F, 0xF5, 0x3A, 0x51, 0x0E, 0x52, 0x7F, 0x9B, 0x05,
+      0x68, 0x8C, 0x1F, 0x83, 0xD9, 0xAB, 0x5B, 0xE0, 0xCD, 0x19};
+
+  sha2_256_init_h0(sha, sha2_256_h0);
+}
+
+void sha2_224_init(sha2_256_t *sha)
+{
+  /* SHA-224 initial values H0, Sect 5.3.2. */
+  const uint8_t sha2_224_h0[32] = {
+      0xC1, 0x05, 0x9E, 0xD8, 0x36, 0x7C, 0xD5, 0x07, 0x30, 0x70, 0xDD,
+      0x17, 0xF7, 0x0E, 0x59, 0x39, 0xFF, 0xC0, 0x0B, 0x31, 0x68, 0x58,
+      0x15, 0x11, 0x64, 0xF9, 0x8F, 0xA7, 0xBE, 0xFA, 0x4F, 0xA4};
+
+  sha2_256_init_h0(sha, sha2_224_h0);
+}
+
+void sha2_256_copy(sha2_256_t *dst, const sha2_256_t *src)
+{
+  dst->i = src->i;
+  dst->len = src->len;
+  memcpy(dst->s, src->s, 32 + src->i);
+}
+
+/* SHA2-256 process input */
+
+void sha2_256_update(sha2_256_t *sha, const uint8_t *m, size_t m_sz)
+{
+  size_t l;
+  uint8_t *mp = (uint8_t *)&sha->s[8];
+
+  sha->len += m_sz;
+  l = 64 - sha->i;
+
+  if (m_sz < l)
+  {
+    memcpy(mp + sha->i, m, m_sz);
+    sha->i += m_sz;
+    return;
+  }
+  if (sha->i > 0)
+  {
+    memcpy(mp + sha->i, m, l);
+    sha2_256_compress(sha->s);
+    m_sz -= l;
+    m += l;
+    sha->i = 0;
+  }
+  while (m_sz >= 64)
+  {
+    memcpy(mp, m, 64);
+    sha2_256_compress(sha->s);
+    m_sz -= 64;
+    m += 64;
+  }
+  memcpy(mp, m, m_sz);
+  sha->i = m_sz;
+}
+
+/* perform final padding */
+
+void sha2_256_final_pad(sha2_256_t *sha)
+{
+  uint8_t *mp = (uint8_t *)&sha->s[8];
+  uint64_t x;
+  size_t i;
+
+  i = sha->i; /* last data block */
+  mp[i++] = 0x80;
+  if (i > 56)
+  {
+    memset(mp + i, 0x00, 64 - i);
+    sha2_256_compress(sha->s);
+    i = 0;
+  }
+  memset(mp + i, 0x00, 64 - i); /* clear rest */
+
+  x = ((uint64_t)sha->len) << 3; /* process length */
+  i = 64;
+  while (x > 0)
+  {
+    mp[--i] = x & 0xFF;
+    x >>= 8;
+  }
+}
+
+/* produce h_sz byte hash */
+
+void sha2_256_final_len(sha2_256_t *sha, uint8_t *h, size_t h_sz)
+{
+  sha2_256_final_pad(sha);
+  sha2_256_compress(sha->s);
+
+  memcpy(h, sha->s, h_sz);
+}
+
+/* SHA-224/256 public single-call interfaces */
+
+void sha2_256(uint8_t *h, const void *m, size_t m_sz)
+{
+  sha2_256_t sha;
+
+  sha2_256_init(&sha);
+  sha2_256_update(&sha, m, m_sz);
+  sha2_256_final(&sha, h);
+}
+
+void sha2_224(uint8_t *h, const void *m, size_t m_sz)
+{
+  sha2_256_t sha;
+
+  sha2_224_init(&sha);
+  sha2_224_update(&sha, m, m_sz);
+  sha2_224_final(&sha, h);
+}
diff --git a/src/sig/slh_dsa/slh_dsa_c/sha2_512.c b/src/sig/slh_dsa/slh_dsa_c/sha2_512.c
new file mode 100644 (file)
index 0000000..12a6464
--- /dev/null
@@ -0,0 +1,355 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 180-4 SHA2-512 / Portable C Implementation */
+
+#include <string.h>
+#include "plat_local.h"
+#include "sha2_api.h"
+
+#ifdef SLH_EXPERIMENTAL
+uint64_t sha2_512_compress_count = 0; /* instrumentation */
+#endif
+
+/* processing step, sets "d" and "h" as a function of all 8 inputs */
+/* and message schedule "mi", round constant "ki" */
+#define STEP_SHA512_R(a, b, c, d, e, f, g, h, mi, ki)  \
+  {                                                    \
+    h += (g ^ (e & (f ^ g))) + mi + ki +               \
+         (ror64(e, 14) ^ ror64(e, 18) ^ ror64(e, 41)); \
+    d += h;                                            \
+    h += (((a | c) & b) | (c & a)) +                   \
+         (ror64(a, 28) ^ ror64(a, 34) ^ ror64(a, 39)); \
+  }
+
+/* keying step, sets x0 as a function of 4 inputs */
+#define STEP_SHA512_K(x0, x1, x9, xe)                      \
+  {                                                        \
+    x0 += x9 + (ror64(x1, 1) ^ ror64(x1, 8) ^ (x1 >> 7)) + \
+          (ror64(xe, 19) ^ ror64(xe, 61) ^ (xe >> 6));     \
+  }
+
+/* compression function (this one does *not* modify m[16]) */
+
+void sha2_512_compress(void *v)
+{
+  /* 4.2.3 SHA-384, SHA-512, SHA-512/224 and SHA-512/256 Constants */
+
+  const uint64_t ck[80] = {
+      UINT64_C(0x428A2F98D728AE22), UINT64_C(0x7137449123EF65CD),
+      UINT64_C(0xB5C0FBCFEC4D3B2F), UINT64_C(0xE9B5DBA58189DBBC),
+      UINT64_C(0x3956C25BF348B538), UINT64_C(0x59F111F1B605D019),
+      UINT64_C(0x923F82A4AF194F9B), UINT64_C(0xAB1C5ED5DA6D8118),
+      UINT64_C(0xD807AA98A3030242), UINT64_C(0x12835B0145706FBE),
+      UINT64_C(0x243185BE4EE4B28C), UINT64_C(0x550C7DC3D5FFB4E2),
+      UINT64_C(0x72BE5D74F27B896F), UINT64_C(0x80DEB1FE3B1696B1),
+      UINT64_C(0x9BDC06A725C71235), UINT64_C(0xC19BF174CF692694),
+      UINT64_C(0xE49B69C19EF14AD2), UINT64_C(0xEFBE4786384F25E3),
+      UINT64_C(0x0FC19DC68B8CD5B5), UINT64_C(0x240CA1CC77AC9C65),
+      UINT64_C(0x2DE92C6F592B0275), UINT64_C(0x4A7484AA6EA6E483),
+      UINT64_C(0x5CB0A9DCBD41FBD4), UINT64_C(0x76F988DA831153B5),
+      UINT64_C(0x983E5152EE66DFAB), UINT64_C(0xA831C66D2DB43210),
+      UINT64_C(0xB00327C898FB213F), UINT64_C(0xBF597FC7BEEF0EE4),
+      UINT64_C(0xC6E00BF33DA88FC2), UINT64_C(0xD5A79147930AA725),
+      UINT64_C(0x06CA6351E003826F), UINT64_C(0x142929670A0E6E70),
+      UINT64_C(0x27B70A8546D22FFC), UINT64_C(0x2E1B21385C26C926),
+      UINT64_C(0x4D2C6DFC5AC42AED), UINT64_C(0x53380D139D95B3DF),
+      UINT64_C(0x650A73548BAF63DE), UINT64_C(0x766A0ABB3C77B2A8),
+      UINT64_C(0x81C2C92E47EDAEE6), UINT64_C(0x92722C851482353B),
+      UINT64_C(0xA2BFE8A14CF10364), UINT64_C(0xA81A664BBC423001),
+      UINT64_C(0xC24B8B70D0F89791), UINT64_C(0xC76C51A30654BE30),
+      UINT64_C(0xD192E819D6EF5218), UINT64_C(0xD69906245565A910),
+      UINT64_C(0xF40E35855771202A), UINT64_C(0x106AA07032BBD1B8),
+      UINT64_C(0x19A4C116B8D2D0C8), UINT64_C(0x1E376C085141AB53),
+      UINT64_C(0x2748774CDF8EEB99), UINT64_C(0x34B0BCB5E19B48A8),
+      UINT64_C(0x391C0CB3C5C95A63), UINT64_C(0x4ED8AA4AE3418ACB),
+      UINT64_C(0x5B9CCA4F7763E373), UINT64_C(0x682E6FF3D6B2B8A3),
+      UINT64_C(0x748F82EE5DEFB2FC), UINT64_C(0x78A5636F43172F60),
+      UINT64_C(0x84C87814A1F0AB72), UINT64_C(0x8CC702081A6439EC),
+      UINT64_C(0x90BEFFFA23631E28), UINT64_C(0xA4506CEBDE82BDE9),
+      UINT64_C(0xBEF9A3F7B2C67915), UINT64_C(0xC67178F2E372532B),
+      UINT64_C(0xCA273ECEEA26619C), UINT64_C(0xD186B8C721C0C207),
+      UINT64_C(0xEADA7DD6CDE0EB1E), UINT64_C(0xF57D4F7FEE6ED178),
+      UINT64_C(0x06F067AA72176FBA), UINT64_C(0x0A637DC5A2C898A6),
+      UINT64_C(0x113F9804BEF90DAE), UINT64_C(0x1B710B35131C471B),
+      UINT64_C(0x28DB77F523047D84), UINT64_C(0x32CAAB7B40C72493),
+      UINT64_C(0x3C9EBE0A15C9BEBC), UINT64_C(0x431D67C49C100D4C),
+      UINT64_C(0x4CC5D4BECB3E42B6), UINT64_C(0x597F299CFC657E2A),
+      UINT64_C(0x5FCB6FAB3AD6FAEC), UINT64_C(0x6C44198C4A475817)};
+
+  uint64_t a, b, c, d, e, f, g, h;
+  uint64_t m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, ma, mb, mc, md, me, mf;
+
+  uint64_t *sp = (uint64_t *)v;
+  const uint64_t *mp = sp + 8;
+  const uint64_t *kp = ck;
+
+#ifdef SLH_EXPERIMENTAL
+  sha2_512_compress_count++; /* instrumentation */
+#endif
+
+  /* get state */
+  a = sp[0] = rev8_be64(sp[0]);
+  b = sp[1] = rev8_be64(sp[1]);
+  c = sp[2] = rev8_be64(sp[2]);
+  d = sp[3] = rev8_be64(sp[3]);
+  e = sp[4] = rev8_be64(sp[4]);
+  f = sp[5] = rev8_be64(sp[5]);
+  g = sp[6] = rev8_be64(sp[6]);
+  h = sp[7] = rev8_be64(sp[7]);
+
+  /* load and reverse bytes (if needed) */
+
+  m0 = rev8_be64(mp[0]);
+  m1 = rev8_be64(mp[1]);
+  m2 = rev8_be64(mp[2]);
+  m3 = rev8_be64(mp[3]);
+  m4 = rev8_be64(mp[4]);
+  m5 = rev8_be64(mp[5]);
+  m6 = rev8_be64(mp[6]);
+  m7 = rev8_be64(mp[7]);
+  m8 = rev8_be64(mp[8]);
+  m9 = rev8_be64(mp[9]);
+  ma = rev8_be64(mp[10]);
+  mb = rev8_be64(mp[11]);
+  mc = rev8_be64(mp[12]);
+  md = rev8_be64(mp[13]);
+  me = rev8_be64(mp[14]);
+  mf = rev8_be64(mp[15]);
+
+  while (1)
+  {
+    /* main rounds */
+    STEP_SHA512_R(a, b, c, d, e, f, g, h, m0, kp[0]);
+    STEP_SHA512_R(h, a, b, c, d, e, f, g, m1, kp[1]);
+    STEP_SHA512_R(g, h, a, b, c, d, e, f, m2, kp[2]);
+    STEP_SHA512_R(f, g, h, a, b, c, d, e, m3, kp[3]);
+    STEP_SHA512_R(e, f, g, h, a, b, c, d, m4, kp[4]);
+    STEP_SHA512_R(d, e, f, g, h, a, b, c, m5, kp[5]);
+    STEP_SHA512_R(c, d, e, f, g, h, a, b, m6, kp[6]);
+    STEP_SHA512_R(b, c, d, e, f, g, h, a, m7, kp[7]);
+    STEP_SHA512_R(a, b, c, d, e, f, g, h, m8, kp[8]);
+    STEP_SHA512_R(h, a, b, c, d, e, f, g, m9, kp[9]);
+    STEP_SHA512_R(g, h, a, b, c, d, e, f, ma, kp[10]);
+    STEP_SHA512_R(f, g, h, a, b, c, d, e, mb, kp[11]);
+    STEP_SHA512_R(e, f, g, h, a, b, c, d, mc, kp[12]);
+    STEP_SHA512_R(d, e, f, g, h, a, b, c, md, kp[13]);
+    STEP_SHA512_R(c, d, e, f, g, h, a, b, me, kp[14]);
+    STEP_SHA512_R(b, c, d, e, f, g, h, a, mf, kp[15]);
+
+    if (kp == &ck[80 - 16])
+    {
+      break;
+    }
+    kp += 16;
+
+    STEP_SHA512_K(m0, m1, m9, me); /* key schedule */
+    STEP_SHA512_K(m1, m2, ma, mf);
+    STEP_SHA512_K(m2, m3, mb, m0);
+    STEP_SHA512_K(m3, m4, mc, m1);
+    STEP_SHA512_K(m4, m5, md, m2);
+    STEP_SHA512_K(m5, m6, me, m3);
+    STEP_SHA512_K(m6, m7, mf, m4);
+    STEP_SHA512_K(m7, m8, m0, m5);
+    STEP_SHA512_K(m8, m9, m1, m6);
+    STEP_SHA512_K(m9, ma, m2, m7);
+    STEP_SHA512_K(ma, mb, m3, m8);
+    STEP_SHA512_K(mb, mc, m4, m9);
+    STEP_SHA512_K(mc, md, m5, ma);
+    STEP_SHA512_K(md, me, m6, mb);
+    STEP_SHA512_K(me, mf, m7, mc);
+    STEP_SHA512_K(mf, m0, m8, md);
+  }
+
+  sp[0] = rev8_be64(sp[0] + a);
+  sp[1] = rev8_be64(sp[1] + b);
+  sp[2] = rev8_be64(sp[2] + c);
+  sp[3] = rev8_be64(sp[3] + d);
+  sp[4] = rev8_be64(sp[4] + e);
+  sp[5] = rev8_be64(sp[5] + f);
+  sp[6] = rev8_be64(sp[6] + g);
+  sp[7] = rev8_be64(sp[7] + h);
+}
+
+/* initialize */
+
+static void sha2_512_init_h0(sha2_512_t *sha, const uint8_t *h0)
+{
+  memcpy(sha->s, h0, 64);
+  sha->i = 0;
+  sha->len = 0;
+}
+
+void sha2_512_init(sha2_512_t *sha)
+{
+  /* SHA-512 initial values H0, Sect 5.3.5. */
+  const uint8_t sha2_512_h0[64] = {
+      0x6A, 0x09, 0xE6, 0x67, 0xF3, 0xBC, 0xC9, 0x08, 0xBB, 0x67, 0xAE,
+      0x85, 0x84, 0xCA, 0xA7, 0x3B, 0x3C, 0x6E, 0xF3, 0x72, 0xFE, 0x94,
+      0xF8, 0x2B, 0xA5, 0x4F, 0xF5, 0x3A, 0x5F, 0x1D, 0x36, 0xF1, 0x51,
+      0x0E, 0x52, 0x7F, 0xAD, 0xE6, 0x82, 0xD1, 0x9B, 0x05, 0x68, 0x8C,
+      0x2B, 0x3E, 0x6C, 0x1F, 0x1F, 0x83, 0xD9, 0xAB, 0xFB, 0x41, 0xBD,
+      0x6B, 0x5B, 0xE0, 0xCD, 0x19, 0x13, 0x7E, 0x21, 0x79};
+
+  sha2_512_init_h0(sha, sha2_512_h0);
+}
+
+void sha2_384_init(sha2_512_t *sha)
+{
+  /* SHA-384 initial values H0, Sect 5.3.4. */
+  const uint8_t sha2_384_h0[64] = {
+      0xCB, 0xBB, 0x9D, 0x5D, 0xC1, 0x05, 0x9E, 0xD8, 0x62, 0x9A, 0x29,
+      0x2A, 0x36, 0x7C, 0xD5, 0x07, 0x91, 0x59, 0x01, 0x5A, 0x30, 0x70,
+      0xDD, 0x17, 0x15, 0x2F, 0xEC, 0xD8, 0xF7, 0x0E, 0x59, 0x39, 0x67,
+      0x33, 0x26, 0x67, 0xFF, 0xC0, 0x0B, 0x31, 0x8E, 0xB4, 0x4A, 0x87,
+      0x68, 0x58, 0x15, 0x11, 0xDB, 0x0C, 0x2E, 0x0D, 0x64, 0xF9, 0x8F,
+      0xA7, 0x47, 0xB5, 0x48, 0x1D, 0xBE, 0xFA, 0x4F, 0xA4};
+
+  sha2_512_init_h0(sha, sha2_384_h0);
+}
+
+void sha2_512_224_init(sha2_512_t *sha)
+{
+  /* SHA-512/224 initial values H0, Sect 5.3.6.1. */
+  const uint8_t sha2_512_224_h0[64] = {
+      0x8C, 0x3D, 0x37, 0xC8, 0x19, 0x54, 0x4D, 0xA2, 0x73, 0xE1, 0x99,
+      0x66, 0x89, 0xDC, 0xD4, 0xD6, 0x1D, 0xFA, 0xB7, 0xAE, 0x32, 0xFF,
+      0x9C, 0x82, 0x67, 0x9D, 0xD5, 0x14, 0x58, 0x2F, 0x9F, 0xCF, 0x0F,
+      0x6D, 0x2B, 0x69, 0x7B, 0xD4, 0x4D, 0xA8, 0x77, 0xE3, 0x6F, 0x73,
+      0x04, 0xC4, 0x89, 0x42, 0x3F, 0x9D, 0x85, 0xA8, 0x6A, 0x1D, 0x36,
+      0xC8, 0x11, 0x12, 0xE6, 0xAD, 0x91, 0xD6, 0x92, 0xA1};
+
+  sha2_512_init_h0(sha, sha2_512_224_h0);
+}
+
+void sha2_512_256_init(sha2_512_t *sha)
+{
+  /* SHA-512/256 initial values H0, Sect 5.3.6.2. */
+  const uint8_t sha2_512_256_h0[64] = {
+      0x22, 0x31, 0x21, 0x94, 0xFC, 0x2B, 0xF7, 0x2C, 0x9F, 0x55, 0x5F,
+      0xA3, 0xC8, 0x4C, 0x64, 0xC2, 0x23, 0x93, 0xB8, 0x6B, 0x6F, 0x53,
+      0xB1, 0x51, 0x96, 0x38, 0x77, 0x19, 0x59, 0x40, 0xEA, 0xBD, 0x96,
+      0x28, 0x3E, 0xE2, 0xA8, 0x8E, 0xFF, 0xE3, 0xBE, 0x5E, 0x1E, 0x25,
+      0x53, 0x86, 0x39, 0x92, 0x2B, 0x01, 0x99, 0xFC, 0x2C, 0x85, 0xB8,
+      0xAA, 0x0E, 0xB7, 0x2D, 0xDC, 0x81, 0xC5, 0x2C, 0xA2};
+
+  sha2_512_init_h0(sha, sha2_512_256_h0);
+}
+
+void sha2_512_copy(sha2_512_t *dst, const sha2_512_t *src)
+{
+  dst->i = src->i;
+  dst->len = src->len;
+  memcpy(dst->s, src->s, 64 + src->i);
+}
+
+/* take message input */
+
+void sha2_512_update(sha2_512_t *sha, const uint8_t *m, size_t m_sz)
+{
+  size_t l;
+  uint8_t *mp = (uint8_t *)&sha->s[8];
+
+  sha->len += m_sz;
+  l = 128 - sha->i;
+
+  if (m_sz < l)
+  {
+    memcpy(mp + sha->i, m, m_sz);
+    sha->i += m_sz;
+    return;
+  }
+  if (sha->i > 0)
+  {
+    memcpy(mp + sha->i, m, l);
+    sha2_512_compress(sha->s);
+    m_sz -= l;
+    m += l;
+    sha->i = 0;
+  }
+  while (m_sz >= 128)
+  {
+    memcpy(mp, m, 128);
+    sha2_512_compress(sha->s);
+    m_sz -= 128;
+    m += 128;
+  }
+  memcpy(mp, m, m_sz);
+  sha->i = m_sz;
+}
+
+/* perform final padding */
+
+void sha2_512_final_pad(sha2_512_t *sha)
+{
+  uint8_t *mp = (uint8_t *)&sha->s[8];
+  uint64_t x;
+  size_t i;
+
+  i = sha->i; /* last data block */
+  mp[i++] = 0x80;
+  if (i > 112)
+  {
+    memset(mp + i, 0x00, 128 - i);
+    sha2_512_compress(sha->s);
+    i = 0;
+  }
+  memset(mp + i, 0x00, 128 - i); /* clear rest */
+
+  x = ((uint64_t)sha->len) << 3; /* process length */
+  i = 128;
+  while (x > 0)
+  {
+    mp[--i] = x & 0xFF;
+    x >>= 8;
+  }
+}
+
+/* produce h_sz byte hash */
+
+void sha2_512_final_len(sha2_512_t *sha, uint8_t *h, size_t h_sz)
+{
+  sha2_512_final_pad(sha);
+  sha2_512_compress(sha->s);
+  memcpy(h, sha->s, h_sz);
+}
+
+/* public single-call interfaces */
+
+void sha2_512(uint8_t *h, const void *m, size_t m_sz)
+{
+  sha2_512_t sha;
+
+  sha2_512_init(&sha);
+  sha2_512_update(&sha, m, m_sz);
+  sha2_512_final(&sha, h);
+}
+
+void sha2_384(uint8_t *h, const void *m, size_t m_sz)
+{
+  sha2_384_t sha;
+
+  sha2_384_init(&sha);
+  sha2_512_update(&sha, m, m_sz);
+  sha2_512_final_len(&sha, h, 48);
+}
+
+void sha2_512_224(uint8_t *h, const void *m, size_t m_sz)
+{
+  sha2_512_t sha;
+
+  sha2_512_224_init(&sha);
+  sha2_512_update(&sha, m, m_sz);
+  sha2_512_final_len(&sha, h, 28);
+}
+
+void sha2_512_256(uint8_t *h, const void *m, size_t m_sz)
+{
+  sha2_512_t sha;
+
+  sha2_512_256_init(&sha);
+  sha2_512_update(&sha, m, m_sz);
+  sha2_512_final_len(&sha, h, 32);
+}
diff --git a/src/sig/slh_dsa/slh_dsa_c/sha2_api.h b/src/sig/slh_dsa/slh_dsa_c/sha2_api.h
new file mode 100644 (file)
index 0000000..1128e59
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 180-4 (SHA-2) -- traditional "MD" type hash API interface. */
+
+#ifndef _SHA2_API_H_
+#define _SHA2_API_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stddef.h>
+#include <stdint.h>
+#include "cbmc.h"
+
+  /* === Single-call hash wrappers === */
+
+  /* SHA2-224: Compute 28-byte hash to "md" from "m" which has "m_sz" bytes. */
+  void sha2_224(uint8_t *md, const void *m, size_t m_sz);
+
+  /* SHA2-256: Compute 32-byte hash to "md" from "m" which has "m_sz" bytes. */
+  void sha2_256(uint8_t *md, const void *m, size_t m_sz);
+
+  /* SHA2-384: Compute 48-byte hash to "md" from "m" which has "m_sz" bytes. */
+  void sha2_384(uint8_t *md, const void *m, size_t m_sz);
+
+  /* SHA2-512: Compute 64-byte hash to "md" from "m" which has "m_sz" bytes. */
+  void sha2_512(uint8_t *md, const void *m, size_t m_sz);
+
+  /* SHA2-512/224: Compute 64-byte hash to "md" from "m" which has "m_sz" */
+  /* bytes. */
+  void sha2_512_224(uint8_t *md, const void *m, size_t m_sz);
+
+  /* SHA2-512/256: Compute 64-byte hash to "md" from "m" which has "m_sz" */
+  /* bytes. */
+  void sha2_512_256(uint8_t *md, const void *m, size_t m_sz);
+
+  /* === incremental interface === */
+
+  typedef struct
+  {
+    uint32_t s[8 + 24];
+    size_t i, len;
+  } sha2_256_t;
+
+  typedef sha2_256_t sha2_224_t;
+
+  typedef struct
+  {
+    uint64_t s[8 + 24];
+    size_t i, len;
+  } sha2_512_t;
+
+  typedef sha2_512_t sha2_384_t;
+
+  /* shaNNN_init(var): Initialize context for hashing. */
+  void sha2_256_init(sha2_256_t *sha)
+  __contract__(
+    requires(memory_no_alias(sha, sizeof(sha2_256_t)))
+    assigns(object_whole(sha))
+  );
+  void sha2_224_init(sha2_256_t *sha);
+  void sha2_512_init(sha2_512_t *sha);
+  void sha2_384_init(sha2_512_t *sha);
+  void sha2_512_224_init(sha2_512_t *sha);
+  void sha2_512_256_init(sha2_512_t *sha);
+
+  /* shaNNN_update(var, m, m_sz): Include "m" of "m_sz" bytes in hash. */
+  void sha2_256_update(sha2_256_t *sha, const uint8_t *m, size_t m_sz);
+#define sha2_224_update(sha, m, m_sz) sha2_256_update(sha, m, m_sz)
+  void sha2_512_update(sha2_512_t *sha, const uint8_t *m, size_t m_sz);
+#define sha2_384_update(sha, m, m_sz) sha2_512_update(sha, m, m_sz)
+
+  /* shaNNN_final(var, h): Finalize hash to "h", and clear the state. */
+  void sha2_256_final_len(sha2_256_t *sha, uint8_t *h, size_t hlen);
+#define sha2_256_final(sha, h) sha2_256_final_len(sha, h, 32)
+#define sha2_224_final(sha, h) sha2_256_final_len(sha, h, 28)
+  void sha2_512_final_len(sha2_512_t *sha, uint8_t *h, size_t hlen);
+#define sha2_512_final(sha, h) sha2_512_final_len(sha, h, 64)
+#define sha2_384_final(sha, h) sha2_512_final_len(sha, h, 48)
+
+  /* final padding */
+  void sha2_256_final_pad(sha2_256_t *sha);
+  void sha2_512_final_pad(sha2_512_t *sha);
+
+  /* copy state */
+  void sha2_256_copy(sha2_256_t *dst, const sha2_256_t *src);
+  void sha2_512_copy(sha2_512_t *dst, const sha2_512_t *src);
+
+  /* compression functions */
+  void sha2_256_compress(void *v);
+  void sha2_512_compress(void *v);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SHA2_API_H_ */
diff --git a/src/sig/slh_dsa/slh_dsa_c/sha3_api.c b/src/sig/slh_dsa/slh_dsa_c/sha3_api.c
new file mode 100644 (file)
index 0000000..e756fb3
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 202: SHA-3 hash and SHAKE eXtensible Output Functions (XOF) */
+
+#include "sha3_api.h"
+
+/* These functions have not been optimized for performance. */
+/* initialize the context for SHA3 */
+
+void sha3_init(sha3_var_t *c, size_t md_sz)
+{
+  size_t i;
+
+  for (i = 0; i < 25; i++)
+  {
+    c->st.d[i] = 0;
+  }
+  c->md_sz = md_sz; /* in SHAKE; if 0, padding done */
+  c->r_sz = 200 - 2 * md_sz;
+  c->pt = 0;
+}
+
+/* update state with more data */
+
+void sha3_update(sha3_var_t *c, const void *data, size_t len)
+{
+  size_t i, j;
+
+  j = c->pt;
+  for (i = 0; i < len; i++)
+  {
+    c->st.b[j++] ^= ((const uint8_t *)data)[i];
+    if (j >= c->r_sz)
+    {
+      keccak_f1600(c->st.d);
+      j = 0;
+    }
+  }
+  c->pt = j;
+}
+
+/* finalize and output a hash */
+
+void sha3_final(sha3_var_t *c, uint8_t *md)
+{
+  size_t i;
+
+  c->st.b[c->pt] ^= 0x06;
+  c->st.b[c->r_sz - 1] ^= 0x80;
+  keccak_f1600(c->st.d);
+
+  for (i = 0; i < c->md_sz; i++)
+  {
+    md[i] = c->st.b[i];
+  }
+}
+
+/* compute a SHA-3 hash "md" of "md_sz" bytes from data in "in" */
+
+void sha3(uint8_t *md, size_t md_sz, const void *in, size_t in_sz)
+{
+  sha3_var_t sha3;
+
+  sha3_init(&sha3, md_sz);
+  sha3_update(&sha3, in, in_sz);
+  sha3_final(&sha3, md);
+}
+
+/* SHAKE128 and SHAKE256 extensible-output functionality */
+/* squeeze output */
+
+void shake_out(sha3_var_t *c, uint8_t *out, size_t out_sz)
+{
+  size_t i, j;
+
+  /* add padding on the first call */
+  if (c->md_sz != 0)
+  {
+    c->st.b[c->pt] ^= 0x1F;
+    c->st.b[c->r_sz - 1] ^= 0x80;
+    keccak_f1600(c->st.d);
+    c->pt = 0;
+    c->md_sz = 0;
+  }
+
+  j = c->pt;
+  for (i = 0; i < out_sz; i++)
+  {
+    if (j >= c->r_sz)
+    {
+      keccak_f1600(c->st.d);
+      j = 0;
+    }
+    out[i] = c->st.b[j++];
+  }
+  c->pt = j;
+}
+
+/* compute a SHAKE hash "md" of "md_sz" bytes from data in "in" */
+
+void shake(uint8_t *md, size_t md_sz, const void *in, size_t in_sz, size_t r_sz)
+{
+  sha3_var_t sha3;
+
+  sha3_init(&sha3, r_sz);
+  sha3_update(&sha3, in, in_sz);
+  shake_out(&sha3, md, md_sz);
+}
diff --git a/src/sig/slh_dsa/slh_dsa_c/sha3_api.h b/src/sig/slh_dsa/slh_dsa_c/sha3_api.h
new file mode 100644 (file)
index 0000000..a47baa8
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 202: SHA-3 hash and SHAKE eXtensible Output Functions (XOF) */
+
+#ifndef _SHA3_API_H_
+#define _SHA3_API_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stddef.h>
+#include <stdint.h>
+
+  typedef struct
+  { /* state context */
+    union
+    {
+      uint8_t b[200]; /* 8-bit bytes */
+      uint64_t d[25]; /* 64-bit words */
+    } st;
+    size_t pt, r_sz, md_sz;
+  } sha3_var_t;
+
+  /* compute a hash "md" of "md_sz" bytes from data in "in" */
+  void sha3(uint8_t *md, size_t md_sz, const void *in, size_t in_sz);
+
+  /* incremental interfece */
+  void sha3_init(sha3_var_t *c,
+                 size_t md_sz); /* md_sz = hash output in bytes */
+  void sha3_update(sha3_var_t *c, const void *data, size_t data_sz);
+  void sha3_final(sha3_var_t *c, uint8_t *md); /* digest goes to md */
+
+/* SHAKE128 and SHAKE256 extensible-output functions */
+#define shake128_init(c) sha3_init(c, 16)
+#define shake256_init(c) sha3_init(c, 32)
+#define shake_update sha3_update
+
+  /* compute a hash "md" of "md_sz" bytes from data in "in" */
+  void shake(uint8_t *md, size_t md_sz, const void *in, size_t in_sz,
+             size_t r_sz);
+#define shake128(md, md_sz, in, in_sz) shake(md, md_sz, in, in_sz, 16)
+#define shake256(md, md_sz, in, in_sz) shake(md, md_sz, in, in_sz, 32)
+
+  /* squeeze output (can call repeat) */
+  void shake_out(sha3_var_t *c, uint8_t *out, size_t out_sz);
+
+  /* core permutation */
+  void keccak_f1600(uint64_t x[25]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SHA3_API_H_ */
diff --git a/src/sig/slh_dsa/slh_dsa_c/sha3_f1600.c b/src/sig/slh_dsa/slh_dsa_c/sha3_f1600.c
new file mode 100644 (file)
index 0000000..0cf2f00
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 202 Keccak permutation implementation for a 64-bit target. */
+
+#include "plat_local.h"
+#include "sha3_api.h"
+
+#ifdef SLH_EXPERIMENTAL
+uint64_t keccak_f1600_count = 0; /* instrumentation */
+#endif
+
+/* forward permutation */
+
+void keccak_f1600(uint64_t x[25])
+{
+  /* round constants */
+  static const uint64_t keccak_rc[24] = {
+      UINT64_C(0x0000000000000001), UINT64_C(0x0000000000008082),
+      UINT64_C(0x800000000000808A), UINT64_C(0x8000000080008000),
+      UINT64_C(0x000000000000808B), UINT64_C(0x0000000080000001),
+      UINT64_C(0x8000000080008081), UINT64_C(0x8000000000008009),
+      UINT64_C(0x000000000000008A), UINT64_C(0x0000000000000088),
+      UINT64_C(0x0000000080008009), UINT64_C(0x000000008000000A),
+      UINT64_C(0x000000008000808B), UINT64_C(0x800000000000008B),
+      UINT64_C(0x8000000000008089), UINT64_C(0x8000000000008003),
+      UINT64_C(0x8000000000008002), UINT64_C(0x8000000000000080),
+      UINT64_C(0x000000000000800A), UINT64_C(0x800000008000000A),
+      UINT64_C(0x8000000080008081), UINT64_C(0x8000000000008080),
+      UINT64_C(0x0000000080000001), UINT64_C(0x8000000080008008)};
+
+  int i;
+  uint64_t t, y0, y1, y2, y3, y4;
+
+#ifdef SLH_EXPERIMENTAL
+  keccak_f1600_count++; /* instrumentation */
+#endif
+
+  /* iteration */
+
+  for (i = 0; i < 24; i++)
+  {
+    /* Theta */
+
+    y4 = x[4] ^ x[9] ^ x[14] ^ x[19] ^ x[24];
+    y1 = x[1] ^ x[6] ^ x[11] ^ x[16] ^ x[21];
+    y3 = x[3] ^ x[8] ^ x[13] ^ x[18] ^ x[23];
+    y0 = x[0] ^ x[5] ^ x[10] ^ x[15] ^ x[20];
+    y2 = x[2] ^ x[7] ^ x[12] ^ x[17] ^ x[22];
+
+    t = ror64(y4, 63);
+    y4 ^= ror64(y1, 63);
+    y1 ^= ror64(y3, 63);
+    y3 ^= ror64(y0, 63);
+    y0 ^= ror64(y2, 63);
+    y2 ^= t;
+
+    x[0] ^= y4;
+    x[1] ^= y0;
+    x[2] ^= y1;
+    x[3] ^= y2;
+    x[4] ^= y3;
+    x[5] ^= y4;
+    x[6] ^= y0;
+    x[7] ^= y1;
+    x[8] ^= y2;
+    x[9] ^= y3;
+    x[10] ^= y4;
+    x[11] ^= y0;
+    x[12] ^= y1;
+    x[13] ^= y2;
+    x[14] ^= y3;
+    x[15] ^= y4;
+    x[16] ^= y0;
+    x[17] ^= y1;
+    x[18] ^= y2;
+    x[19] ^= y3;
+    x[20] ^= y4;
+    x[21] ^= y0;
+    x[22] ^= y1;
+    x[23] ^= y2;
+    x[24] ^= y3;
+
+    /* Rho Pi */
+
+    t = ror64(x[1], 63);
+    x[1] = ror64(x[6], 20);
+    x[6] = ror64(x[9], 44);
+    x[9] = ror64(x[22], 3);
+    x[22] = ror64(x[14], 25);
+    x[14] = ror64(x[20], 46);
+    x[20] = ror64(x[2], 2);
+    x[2] = ror64(x[12], 21);
+    x[12] = ror64(x[13], 39);
+    x[13] = ror64(x[19], 56);
+    x[19] = ror64(x[23], 8);
+    x[23] = ror64(x[15], 23);
+    x[15] = ror64(x[4], 37);
+    x[4] = ror64(x[24], 50);
+    x[24] = ror64(x[21], 62);
+    x[21] = ror64(x[8], 9);
+    x[8] = ror64(x[16], 19);
+    x[16] = ror64(x[5], 28);
+    x[5] = ror64(x[3], 36);
+    x[3] = ror64(x[18], 43);
+    x[18] = ror64(x[17], 49);
+    x[17] = ror64(x[11], 54);
+    x[11] = ror64(x[7], 58);
+    x[7] = ror64(x[10], 61);
+    x[10] = t;
+
+    /* Chi */
+
+    t = x[4] & ~x[3];
+    x[4] ^= x[1] & ~x[0];
+    x[1] ^= x[3] & ~x[2];
+    x[3] ^= x[0] & ~x[4];
+    x[0] ^= x[2] & ~x[1];
+    x[2] ^= t;
+
+    t = x[9] & ~x[8];
+    x[9] ^= x[6] & ~x[5];
+    x[6] ^= x[8] & ~x[7];
+    x[8] ^= x[5] & ~x[9];
+    x[5] ^= x[7] & ~x[6];
+    x[7] ^= t;
+
+    t = x[14] & ~x[13];
+    x[14] ^= x[11] & ~x[10];
+    x[11] ^= x[13] & ~x[12];
+    x[13] ^= x[10] & ~x[14];
+    x[10] ^= x[12] & ~x[11];
+    x[12] ^= t;
+
+    t = x[19] & ~x[18];
+    x[19] ^= x[16] & ~x[15];
+    x[16] ^= x[18] & ~x[17];
+    x[18] ^= x[15] & ~x[19];
+    x[15] ^= x[17] & ~x[16];
+    x[17] ^= t;
+
+    t = x[24] & ~x[23];
+    x[24] ^= x[21] & ~x[20];
+    x[21] ^= x[23] & ~x[22];
+    x[23] ^= x[20] & ~x[24];
+    x[20] ^= x[22] & ~x[21];
+    x[22] ^= t;
+
+    /* Iota */
+
+    x[0] = x[0] ^ keccak_rc[i];
+  }
+}
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_adrs.h b/src/sig/slh_dsa/slh_dsa_c/slh_adrs.h
new file mode 100644 (file)
index 0000000..8bd0ac8
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === Internal ADRS manipulation functions (FIPS 205 Section 4.3) */
+
+#ifndef _SLH_ADRS_H_
+#define _SLH_ADRS_H_
+
+#include <string.h>
+#include "slh_param.h"
+#include "slh_var.h"
+#include "slh_sys.h"
+
+/* ADRS type constants */
+
+#define ADRS_WOTS_HASH 0
+#define ADRS_WOTS_PK 1
+#define ADRS_TREE 2
+#define ADRS_FORS_TREE 3
+#define ADRS_FORS_ROOTS 4
+#define ADRS_WOTS_PRF 5
+#define ADRS_FORS_PRF 6
+
+/* Algorithm 1: toInt(x, n) */
+
+static SLH_INLINE uint64_t slh_toint(const uint8_t *x, unsigned n)
+{
+  unsigned i;
+  uint64_t t;
+
+  if (n == 0)
+  {
+    return 0;
+  }
+  t = (uint64_t)x[0];
+  for (i = 1; i < n; i++)
+  {
+    t <<= 8;
+    t += (uint64_t)x[i];
+  }
+  return t;
+}
+
+/* Algorithm 2: toByte(x, n) */
+
+static SLH_INLINE void slh_tobyte(uint8_t *x, uint64_t t, unsigned n)
+{
+  unsigned i;
+
+  if (n == 0)
+  {
+    return;
+  }
+  for (i = n - 1; i > 0; i--)
+  {
+    x[i] = (uint8_t)(t & 0xFF);
+    t >>= 8;
+  }
+  x[0] = (uint8_t)t;
+}
+
+/* === Clear / initialize */
+static SLH_INLINE void adrs_zero(slh_var_t *var)
+{
+  var->adrs->u32[0] = 0;
+  var->adrs->u32[1] = 0;
+  var->adrs->u32[2] = 0;
+  var->adrs->u32[3] = 0;
+  var->adrs->u32[4] = 0;
+  var->adrs->u32[5] = 0;
+  var->adrs->u32[6] = 0;
+  var->adrs->u32[7] = 0;
+}
+
+/* === Set layer address. */
+static SLH_INLINE void adrs_set_layer_address(slh_var_t *var, uint32_t x)
+{
+  var->adrs->u32[0] = rev8_be32(x);
+}
+
+/* === Set tree addresss. */
+static SLH_INLINE void adrs_set_tree_address(slh_var_t *var, uint64_t x)
+{
+  /* bytes a[4:8] of tree address are always zero */
+  var->adrs->u32[2] = rev8_be32(x >> 32);
+  var->adrs->u32[3] = rev8_be32(x & 0xFFFFFFFF);
+}
+
+/* === Set key pair Address. */
+static SLH_INLINE void adrs_set_key_pair_address(slh_var_t *var, uint32_t x)
+{
+  var->adrs->u32[5] = rev8_be32(x);
+}
+
+/* === Get key pair Address. */
+static SLH_INLINE uint32_t adrs_get_key_pair_address(const slh_var_t *var)
+{
+  return rev8_be32(var->adrs->u32[5]);
+}
+
+/* === Set FORS tree height. */
+static SLH_INLINE void adrs_set_tree_height(slh_var_t *var, uint32_t x)
+{
+  var->adrs->u32[6] = rev8_be32(x);
+}
+
+/* === Set WOTS+ chain address. */
+static SLH_INLINE void adrs_set_chain_address(slh_var_t *var, uint32_t x)
+{
+  var->adrs->u32[6] = rev8_be32(x);
+}
+
+/* === Set FORS tree index. */
+static SLH_INLINE void adrs_set_tree_index(slh_var_t *var, uint32_t x)
+{
+  var->adrs->u32[7] = rev8_be32(x);
+}
+
+/* === Get FORS tree index. */
+static SLH_INLINE uint32_t adrs_get_tree_index(const slh_var_t *var)
+{
+  return rev8_be32(var->adrs->u32[7]);
+}
+
+/* === Set WOTS+ hash address. */
+static SLH_INLINE void adrs_set_hash_address(slh_var_t *var, uint32_t x)
+{
+  var->adrs->u32[7] = rev8_be32(x);
+}
+
+static SLH_INLINE void adrs_set_type(slh_var_t *var, uint32_t y)
+{
+  var->adrs->u32[4] = rev8_be32(y);
+}
+
+static SLH_INLINE uint32_t adrs_get_type(slh_var_t *var)
+{
+  return rev8_be32(var->adrs->u32[4]);
+}
+
+/* === "Function ADRS.setTypeAndClear(Y) for addresses sets the type */
+/* of the ADRS to Y and sets the final 12 bytes of the ADRS to zero." */
+static SLH_INLINE void adrs_set_type_and_clear(slh_var_t *var, uint32_t y)
+{
+  var->adrs->u32[4] = rev8_be32(y);
+  var->adrs->u32[5] = 0;
+  var->adrs->u32[6] = 0;
+  var->adrs->u32[7] = 0;
+}
+
+static SLH_INLINE void adrs_set_type_and_clear_not_kp(slh_var_t *var, uint32_t y)
+{
+  var->adrs->u32[4] = rev8_be32(y);
+  var->adrs->u32[6] = 0;
+  var->adrs->u32[7] = 0;
+}
+
+/* === Compressed 22-byte address ADRSc used with SHA-2. */
+static SLH_INLINE void adrsc_22(const slh_var_t *var, uint8_t *ac)
+{
+  int i;
+  ac[0] = var->adrs->u8[3];
+  for (i = 0; i < 8; i++)
+  {
+    ac[i + 1] = var->adrs->u8[i + 8];
+  }
+  for (i = 0; i < 13; i++)
+  {
+    ac[i + 9] = var->adrs->u8[i + 19];
+  }
+}
+
+/* _SLH_ADRS_H_ */
+#endif
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_dsa.c b/src/sig/slh_dsa/slh_dsa_c/slh_dsa.c
new file mode 100644 (file)
index 0000000..4fb3dad
--- /dev/null
@@ -0,0 +1,718 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 205 Stateless Hash-Based Digital Signature Standard */
+
+#include "slh_dsa.h"
+#include "slh_adrs.h"
+#include "slh_var.h"
+#include "slh_sys.h"
+
+/* === Internal */
+
+/* helper functions to compute "len = len1 + len2" */
+
+static SLH_INLINE uint32_t get_len1(const slh_param_t *prm)
+{
+  return ((8 * prm->n + (prm->lg_w - 1)) / prm->lg_w);
+}
+
+/* === Computes len2 (Equation 5.3). */
+/* Algorithm 1: gen_len2(n, lg_w) */
+
+static SLH_INLINE uint32_t gen_len2(const slh_param_t *prm)
+{
+  uint32_t len2, cap, maxs;
+
+  /* "When lg_w = 4 and 9 <= n <= 136, the value of len2 will be 3." */
+  if (prm->lg_w == 4 && prm->n >= 9 && prm->n <= 136)
+  {
+    return 3;
+  }
+
+  maxs = get_len1(prm) * ((1 << prm->lg_w) - 1);
+  len2 = 1;
+  cap = 1 << prm->lg_w;
+  while (cap < maxs)
+  {
+    len2++;
+    cap <<= prm->lg_w;
+  }
+  return len2;
+}
+
+static SLH_INLINE uint32_t get_len(const slh_param_t *prm)
+{
+  return get_len1(prm) + gen_len2(prm);
+}
+
+/* Return signature size in bytes for parameter set *prm. */
+size_t slh_sig_sz(const slh_param_t *prm)
+{
+  return (1 + prm->k * (1 + prm->a) + prm->h + prm->d * get_len(prm)) * prm->n;
+}
+
+/* === Compute the base 2**b representation of X. */
+/* Algorithm 4: base_2b(X, b, out_len) */
+
+static SLH_INLINE size_t base_2b(uint32_t *v, const uint8_t *x, uint32_t b,
+                             size_t v_len)
+{
+  size_t i, j;
+  uint32_t l, t, m;
+
+  j = 0;
+  l = 0;
+  t = 0;
+  m = (1 << b) - 1;
+  for (i = 0; i < v_len; i++)
+  {
+    while (l < b)
+    {
+      t = (t << 8) + ((uint32_t) x[j++]);
+      l += 8;
+    }
+    l -= b;
+    v[i] = (t >> l) & m;
+  }
+  return j;
+}
+
+/* === Chaining function used in WOTS+ */
+/* Algorithm 5: chain(X, i, s, PK.seed, ADRS) */
+/* (see prm->chain) */
+
+/* === Generate a WOTS+ public key. */
+/* Algorithm 6: wots_PKgen(SK.seed, PK.seed, ADRS) */
+/* (see xmms_node) */
+
+/* === Generate a WOTS+ signature on an n-byte message. */
+/* Algorithm 7: wots_sign(M, SK.seed, PK.seed, ADRS) */
+
+/* (wots_csum is a shared helper function for algorithms 7 and 8) */
+static void wots_csum(uint32_t *vm, const uint8_t *m, const slh_param_t *prm)
+{
+  uint32_t csum, i, t;
+  uint32_t len1, len2;
+  uint8_t buf[4];
+
+  len1 = get_len1(prm);
+  len2 = gen_len2(prm);
+
+  base_2b(vm, m, prm->lg_w, len1);
+  
+  csum = 0;
+  t = (1 << prm->lg_w) - 1;
+  for (i = 0; i < len1; i++)
+  {
+    csum += t - vm[i];
+  }
+  csum <<= (8 - ((len2 * prm->lg_w) & 7)) & 7;
+
+  t = (len2 * prm->lg_w + 7) / 8;
+  memset(buf, 0, sizeof(buf));
+  slh_tobyte(buf, csum, t);
+
+  base_2b(&vm[len1], buf, prm->lg_w, len2);
+}
+
+static size_t wots_sign(slh_var_t *var, uint8_t *sig, const uint8_t *m)
+{
+  const slh_param_t *prm = var->prm;
+  uint32_t i, len;
+  uint32_t vm[SLH_MAX_LEN];
+  size_t n = prm->n;
+
+  len = get_len(prm);
+  wots_csum(vm, m, prm);
+
+  for (i = 0; i < len; i++)
+  {
+    adrs_set_chain_address(var, i);
+    prm->wots_chain(var, sig, vm[i]);
+    sig += n;
+  }
+  return n * len;
+}
+
+/* === Compute a WOTS+ public key from a message and its signature. */
+/* Algorithm 8: wots_PKFromSig(sig, M, PK.seed, ADRS) */
+
+static void wots_pk_from_sig(slh_var_t *var, uint8_t *pk, const uint8_t *sig,
+                             const uint8_t *m)
+{
+  const slh_param_t *prm = var->prm;
+  size_t n = prm->n;
+  uint32_t i, t, len;
+  uint32_t vm[SLH_MAX_LEN];
+  uint8_t tmp[SLH_MAX_LEN * SLH_MAX_N];
+  size_t tmp_sz;
+
+  wots_csum(vm, m, prm);
+
+  len = get_len(prm);
+  t = (1 << prm->lg_w) - 1;
+  tmp_sz = 0;
+  for (i = 0; i < len; i++)
+  {
+    adrs_set_chain_address(var, i);
+    prm->chain(var, tmp + tmp_sz, sig + tmp_sz, vm[i], t - vm[i]);
+    tmp_sz += n;
+  }
+
+  adrs_set_type_and_clear_not_kp(var, ADRS_WOTS_PK);
+  prm->h_t(var, pk, tmp, tmp_sz);
+}
+
+/* === Compute the root of a Merkle subtree of WOTS+ public keys. */
+/* Algorithm 9: xmss_node(SK.seed, i, z, PK.seed, ADRS) */
+
+static void xmss_node(slh_var_t *var, uint8_t *node, uint32_t i, uint32_t z)
+{
+  const slh_param_t *prm = var->prm;
+  uint32_t j, k, w1;
+  int p;
+  uint8_t *h0, h[SLH_MAX_HP][SLH_MAX_N];
+  uint8_t tmp[SLH_MAX_LEN * SLH_MAX_N];
+  uint8_t *sk;
+  size_t n = prm->n;
+  size_t len = get_len(prm);
+
+  p = -1;
+  i <<= z;
+  w1 = (1 << prm->lg_w) - 1;
+  for (j = 0; j < (1u << z); j++)
+  {
+    adrs_set_key_pair_address(var, i);
+
+    /* === Generate a WOTS+ public key. */
+    /* Algorithm 6: wots_PKgen(SK.seed, PK.seed, ADRS) */
+    sk = tmp;
+    for (k = 0; k < len; k++)
+    {
+      adrs_set_chain_address(var, k);
+      prm->wots_chain(var, sk, w1);
+      sk += n;
+    }
+    adrs_set_type_and_clear_not_kp(var, ADRS_WOTS_PK);
+    h0 = p >= 0 ? h[p] : node;
+    p++;
+    prm->h_t(var, h0, tmp, len * n);
+
+    /* this xmss_node() implementation is non-recursive */
+    for (k = 0; (j >> k) & 1; k++)
+    {
+      adrs_set_type_and_clear(var, ADRS_TREE);
+      adrs_set_tree_height(var, k + 1);
+      adrs_set_tree_index(var, i >> (k + 1));
+      p--;
+      h0 = p >= 1 ? h[p - 1] : node;
+      prm->h_h(var, h0, h0, h[p]);
+    }
+    i++; /* advance index */
+  }
+}
+
+/* === Generate an XMSS signature. */
+/* Algorithm 10: xmss_sign(M, SK.seed, idx, PK.seed, ADRS) */
+
+static size_t xmss_sign(slh_var_t *var, uint8_t *sx, const uint8_t *m,
+                        uint32_t idx)
+{
+  const slh_param_t *prm = var->prm;
+  uint32_t j, k;
+  uint8_t *auth;
+  size_t sx_sz = 0;
+  size_t n = prm->n;
+
+  sx_sz = get_len(prm) * n;
+  auth = sx + sx_sz;
+
+  for (j = 0; j < prm->hp; j++)
+  {
+    k = (idx >> j) ^ 1;
+    xmss_node(var, auth, k, j);
+    auth += n;
+  }
+  sx_sz += prm->hp * n;
+
+  adrs_set_type_and_clear_not_kp(var, ADRS_WOTS_HASH);
+  adrs_set_key_pair_address(var, idx);
+  wots_sign(var, sx, m);
+
+  return sx_sz;
+}
+
+/* === Compute an XMSS public key from an XMSS signature. */
+/* Algorithm 11: xmss_PKFromSig(idx, SIGXMSS, M, PK.seed, ADRS) */
+
+static void xmss_pk_from_sig(slh_var_t *var, uint8_t *root, uint32_t idx,
+                             const uint8_t *sig, const uint8_t *m)
+{
+  const slh_param_t *prm = var->prm;
+  size_t n = prm->n;
+  uint32_t k;
+  const uint8_t *auth;
+
+  adrs_set_type_and_clear_not_kp(var, ADRS_WOTS_HASH);
+  adrs_set_key_pair_address(var, idx);
+
+  wots_pk_from_sig(var, root, sig, m);
+  adrs_set_type_and_clear(var, ADRS_TREE);
+
+  auth = sig + (get_len(prm) * n);
+
+  for (k = 0; k < prm->hp; k++)
+  {
+    adrs_set_tree_height(var, k + 1);
+    adrs_set_tree_index(var, idx >> (k + 1));
+
+    if (((idx >> k) & 1) == 0)
+    {
+      prm->h_h(var, root, root, auth);
+    }
+    else
+    {
+      prm->h_h(var, root, auth, root);
+    }
+    auth += n;
+  }
+}
+
+/* === Generate a hypertree signature. */
+/* Algorithm 12: ht_sign(M, SK.seed, PK.seed, idx_tree, idx_leaf ) */
+
+static size_t ht_sign(slh_var_t *var, uint8_t *sh, uint8_t *m, uint64_t i_tree,
+                      uint32_t i_leaf)
+{
+  const slh_param_t *prm = var->prm;
+  uint32_t j;
+  size_t sx_sz;
+
+  adrs_zero(var);
+  adrs_set_tree_address(var, i_tree);
+  sx_sz = xmss_sign(var, sh, m, i_leaf);
+
+  for (j = 1; j < prm->d; j++)
+  {
+    xmss_pk_from_sig(var, m, i_leaf, sh, m);
+    sh += sx_sz;
+
+    i_leaf = i_tree & ((1 << prm->hp) - 1);
+    i_tree >>= prm->hp;
+    adrs_set_layer_address(var, j);
+    adrs_set_tree_address(var, i_tree);
+    xmss_sign(var, sh, m, i_leaf);
+  }
+
+  return sx_sz * prm->d;
+}
+
+/* === Verify a hypertree signature. */
+/* Algorithm 13: ht_verify(M, SIG_HT, PK.seed, idx_tree, idx_leaf, PK.root) */
+
+static int ht_verify(slh_var_t *var, const uint8_t *m, const uint8_t *sig_ht,
+                     uint64_t i_tree, uint32_t i_leaf)
+{
+  const slh_param_t *prm = var->prm;
+  uint32_t j;
+  uint8_t node[SLH_MAX_N] = {0};
+  size_t st_sz;
+
+  adrs_zero(var);
+  adrs_set_tree_address(var, i_tree);
+
+  xmss_pk_from_sig(var, node, i_leaf, sig_ht, m);
+
+  st_sz = (prm->hp + get_len(prm)) * prm->n;
+
+  for (j = 1; j < prm->d; j++)
+  {
+    i_leaf = i_tree & ((1 << prm->hp) - 1);
+    i_tree >>= prm->hp;
+    adrs_set_layer_address(var, j);
+    adrs_set_tree_address(var, i_tree);
+    sig_ht += st_sz;
+    xmss_pk_from_sig(var, node, i_leaf, sig_ht, node);
+  }
+
+  return memcmp(node, var->pk_root, prm->n) == 0;
+}
+
+/* === Generate a FORS private-key value. */
+/* Algorithm 14: fors_SKgen(SK.seed, PK.seed, ADRS, idx) */
+
+/* ( see prm->fors_hash() ) */
+
+/* === Computes the root of a Merkle subtree of FORS public values. */
+/* Algorithm 15: fors_node(SK.seed, i, z, PK.seed, ADRS) */
+
+static void fors_node(slh_var_t *var, uint8_t *node, uint32_t i, uint32_t z)
+{
+  const slh_param_t *prm = var->prm;
+  uint8_t h[SLH_MAX_A][SLH_MAX_N], *h0;
+  uint32_t j, k;
+  int p;
+
+  p = -1;
+  i <<= z;
+  for (j = 0; j < (1u << z); j++)
+  {
+    /* fors_SKgen() + hash */
+    adrs_set_tree_index(var, i);
+    h0 = p >= 0 ? h[p] : node;
+    p++;
+    prm->fors_hash(var, h0, 1);
+
+    /* this fors_node() implementation is non-recursive */
+    for (k = 0; (j >> k) & 1; k++)
+    {
+      adrs_set_tree_height(var, k + 1);
+      adrs_set_tree_index(var, i >> (k + 1));
+      p--;
+      h0 = p > 0 ? h[p - 1] : node;
+      prm->h_h(var, h0, h0, h[p]);
+    }
+    i++; /* advance index */
+  }
+}
+
+/* === Generates a FORS signature. */
+/* Algorithm 16: fors_sign(md, SK.seed, PK.seed, ADRS) */
+
+static size_t fors_sign(slh_var_t *var, uint8_t *sf, const uint8_t *md)
+{
+  const slh_param_t *prm = var->prm;
+  uint32_t i, j, s;
+  uint32_t vi[SLH_MAX_K];
+  size_t n = prm->n;
+
+  base_2b(vi, md, prm->a, prm->k);
+
+  for (i = 0; i < prm->k; i++)
+  {
+    /* fors_SKgen() */
+    adrs_set_tree_index(var, (i << prm->a) + vi[i]);
+    prm->fors_hash(var, sf, 0);
+    sf += n;
+
+    for (j = 0; j < prm->a; j++)
+    {
+      s = (vi[i] >> j) ^ 1;
+      fors_node(var, sf, (i << (prm->a - j)) + s, j);
+      sf += n;
+    }
+  }
+  return n * prm->k * (1 + prm->a);
+}
+
+/* === Compute a FORS public key from a FORS signature. */
+/* Algorithm 17: fors_pkFromSig(SIGFORS , md, PK.seed, ADRS) */
+
+static void fors_pk_from_sig(slh_var_t *var, uint8_t *pk, const uint8_t *sf,
+                             const uint8_t *md)
+{
+  const slh_param_t *prm = var->prm;
+  uint32_t i, j, idx;
+  uint32_t vi[SLH_MAX_K];
+  uint8_t root[SLH_MAX_K * SLH_MAX_N];
+  uint8_t *node;
+  size_t n = prm->n;
+
+  base_2b(vi, md, prm->a, prm->k);
+
+  node = root;
+  for (i = 0; i < prm->k; i++)
+  {
+    adrs_set_tree_height(var, 0);
+
+    idx = (i << prm->a) + vi[i];
+    adrs_set_tree_index(var, idx);
+
+    prm->h_f(var, node, sf);
+    sf += n;
+
+    for (j = 0; j < prm->a; j++)
+    {
+      adrs_set_tree_height(var, j + 1);
+      adrs_set_tree_index(var, idx >> (j + 1));
+
+      if (((vi[i] >> j) & 1) == 0)
+      {
+        prm->h_h(var, node, node, sf);
+      }
+      else
+      {
+        prm->h_h(var, node, sf, node);
+      }
+      sf += n;
+    }
+    node += n;
+  }
+
+  adrs_set_type_and_clear_not_kp(var, ADRS_FORS_ROOTS);
+  prm->h_t(var, pk, root, prm->k * n);
+}
+
+/* === Public API */
+
+/* Return standard identifier string for parameter set *prm, or NULL. */
+const char *slh_alg_id(const slh_param_t *prm) { return prm->alg_id; }
+
+/* Return public (verification) key size in bytes for parameter set *prm. */
+size_t slh_pk_sz(const slh_param_t *prm) { return 2 * prm->n; }
+
+/* Return private (signing) key size in bytes for parameter set *prm. */
+size_t slh_sk_sz(const slh_param_t *prm) { return 4 * prm->n; }
+
+/* === Generates an SLH-DSA key pair. */
+/* Algorithm 18: slh_keygen_internal(SK.seed, SK.prf, PK.seed) */
+
+int slh_keygen_internal(uint8_t *sk, uint8_t *pk, const uint8_t *sk_seed,
+                        const uint8_t *sk_prf, const uint8_t *pk_seed,
+                        const slh_param_t *prm)
+{
+  slh_var_t var;
+  size_t n = prm->n;
+
+  memcpy(sk, sk_seed, n);           /* SK_seed */
+  memcpy(sk + n, sk_prf, n);        /* SK.prf */
+  memcpy(sk + 2 * n, pk_seed, n);   /* PK.seed */
+  memset(sk + 3 * n, 0x00, n);      /* PK.root not generated yet */
+  prm->mk_var(&var, NULL, sk, prm); /* fill in partial */
+
+  adrs_zero(&var);
+  adrs_set_layer_address(&var, prm->d - 1);
+  memcpy(pk, pk_seed, n);              /* PK.seed in pk */
+  xmss_node(&var, pk + n, 0, prm->hp); /* PK.root in pk (compute) */
+  memcpy(sk + 3 * n, pk + n, n);       /* PK.root in sk */
+
+  return 0;
+}
+
+/* === Generates an SLH-DSA key pair. */
+/* Algorithm 21: slh_keygen() */
+
+int slh_keygen(uint8_t *sk, uint8_t *pk, int (*rbg)(uint8_t *x, size_t xlen),
+               const slh_param_t *prm)
+{
+  slh_var_t var;
+  uint8_t pk_root[SLH_MAX_N];
+  size_t n = prm->n;
+
+  rbg(sk, 3 * n);                   /* SK.seed || SK.prf || PK.seed */
+  memcpy(pk, sk + 2 * n, n);        /* PK.seed */
+  memset(sk + 3 * n, 0x00, n);      /* PK.root not generated yet */
+  prm->mk_var(&var, NULL, sk, prm); /* fill in partial */
+
+  adrs_zero(&var);
+  adrs_set_layer_address(&var, prm->d - 1);
+  xmss_node(&var, pk_root, 0, prm->hp);
+
+  /* fill pk_root */
+  memcpy(sk + 3 * n, pk_root, n);
+  memcpy(pk + n, pk_root, n);
+  return 0;
+}
+
+/* === sigGen === */
+
+/* (Shared helper function for algorithms 18 and 19.) */
+
+static void split_digest(uint64_t *i_tree, uint32_t *i_leaf,
+                         const uint8_t *digest, const slh_param_t *prm)
+{
+  size_t md_sz = (prm->k * prm->a + 7) / 8;
+  const uint8_t *pi_tree = digest + md_sz;
+  size_t i_tree_sz = (prm->h - prm->hp + 7) / 8;
+  size_t i_leaf_sz = (prm->hp + 7) / 8;
+  const uint8_t *pi_leaf = pi_tree + i_tree_sz;
+
+  *i_tree = slh_toint(pi_tree, i_tree_sz);
+  *i_leaf = slh_toint(pi_leaf, i_leaf_sz);
+  if ((prm->h - prm->hp) != 64)
+  {
+    *i_tree &= (UINT64_C(1) << (prm->h - prm->hp)) - UINT64_C(1);
+  }
+  *i_leaf &= (1 << prm->hp) - 1;
+}
+
+/* Core signing function that just takes in "digest" and an already */
+/* initialized secret key context. *sig points to signature after */
+/* randomizer.  Returns the length of |SIG_FORS + SIG_HT| written at *sig. */
+
+static size_t slh_sign_digest(slh_var_t *var, uint8_t *sig,
+                              const uint8_t *digest)
+{
+  const uint8_t *md = digest;
+  uint64_t i_tree = 0;
+  uint32_t i_leaf = 0;
+  uint8_t pk_fors[SLH_MAX_N] = {0};
+  size_t sig_sz;
+
+  split_digest(&i_tree, &i_leaf, digest, var->prm);
+
+  adrs_zero(var);
+  adrs_set_tree_address(var, i_tree);
+  adrs_set_type_and_clear_not_kp(var, ADRS_FORS_TREE);
+  adrs_set_key_pair_address(var, i_leaf);
+
+  /* SIG_FORS */
+  sig_sz = fors_sign(var, sig, md);
+  fors_pk_from_sig(var, pk_fors, sig, md);
+
+  /* SIG_HT */
+  sig += sig_sz;
+  sig_sz += ht_sign(var, sig, pk_fors, i_tree, i_leaf);
+
+  return sig_sz;
+}
+
+/* Algorithm 19: slh_sign_internal(M, SK, addrnd) */
+
+size_t slh_sign_internal(uint8_t *sig, const uint8_t *m, size_t m_sz,
+                         const uint8_t *sk, const uint8_t *addrnd,
+                         const slh_param_t *prm)
+{
+  slh_var_t var;
+  const uint8_t *opt_rand;
+  uint8_t digest[SLH_MAX_M];
+  size_t sig_sz;
+
+  /* set up secret key etc */
+  prm->mk_var(&var, NULL, sk, prm);
+
+  if (addrnd != NULL)
+  {
+    opt_rand = addrnd; /* randomnesss; non-determinsitic */
+  }
+  else
+  {
+    opt_rand = var.pk_seed; /* deterministic variant */
+  }
+
+  /* randomized hashing; R (first part of signarure) */
+  sig_sz = prm->n;
+  prm->prf_msg(&var, sig, opt_rand, m, m_sz, NULL, SLH_CTX_SZ_NO_CONTEXT);
+  prm->h_msg(&var, digest, sig, m, m_sz, NULL, SLH_CTX_SZ_NO_CONTEXT);
+
+  /* create FORS and HT signature parts */
+  sig_sz += slh_sign_digest(&var, sig + sig_sz, digest);
+
+  return sig_sz;
+}
+
+/* Algorithm 22: slh_sign(M, ctx, SK) */
+
+size_t slh_sign(uint8_t *sig, const uint8_t *m, size_t m_sz, const uint8_t *ctx,
+                size_t ctx_sz, const uint8_t *sk, const uint8_t *addrnd,
+                const slh_param_t *prm)
+{
+  slh_var_t var;
+  const uint8_t *opt_rand;
+  uint8_t digest[SLH_MAX_M] = {0};
+  size_t sig_sz;
+
+  if (ctx_sz > 255)
+  {
+    return 0;
+  }
+
+  /* set up secret key etc */
+  prm->mk_var(&var, NULL, sk, prm);
+
+  if (addrnd != NULL)
+  {
+    opt_rand = addrnd; /* randomnesss; non-determinsitic */
+  }
+  else
+  {
+    opt_rand = var.pk_seed; /* deterministic variant */
+  }
+
+  /* randomized hashing; R (first part of signarure) */
+  sig_sz = prm->n;
+  prm->prf_msg(&var, sig, opt_rand, m, m_sz, ctx, ctx_sz);
+  prm->h_msg(&var, digest, sig, m, m_sz, ctx, ctx_sz);
+
+  /* create FORS and HT signature parts */
+  sig_sz += slh_sign_digest(&var, sig + sig_sz, digest);
+
+  return sig_sz;
+}
+
+/* === sigVer === */
+
+/* most of Algorithm 20: slh_verify_internal(M, SIG, PK) */
+
+static int slh_verify_digest(slh_var_t *var, const uint8_t *digest,
+                             const uint8_t *sig, size_t sig_sz,
+                             const slh_param_t *prm)
+{
+  uint8_t pk_fors[SLH_MAX_N] = { 0 };
+  const uint8_t *sig_fors;
+  const uint8_t *sig_ht;
+  const uint8_t *md = digest;
+  uint64_t i_tree = 0;
+  uint32_t i_leaf = 0;
+
+  sig_fors = sig + prm->n;
+  sig_ht = sig + ((1 + prm->k * (1 + prm->a)) * prm->n);
+
+  /* check signature length */
+  if (sig_sz != slh_sig_sz(prm))
+  {
+    return 0; /* false */
+  }
+
+  split_digest(&i_tree, &i_leaf, digest, prm);
+
+  adrs_zero(var);
+  adrs_set_tree_address(var, i_tree);
+  adrs_set_type_and_clear_not_kp(var, ADRS_FORS_TREE);
+  adrs_set_key_pair_address(var, i_leaf);
+
+  fors_pk_from_sig(var, pk_fors, sig_fors, md);
+
+  return ht_verify(var, pk_fors, sig_ht, i_tree, i_leaf);
+}
+
+/* Algorithm 20: slh_verify_internal(M, SIG, PK) */
+
+int slh_verify_internal(const uint8_t *m, size_t m_sz, const uint8_t *sig,
+                        size_t sig_sz, const uint8_t *pk,
+                        const slh_param_t *prm)
+{
+  slh_var_t var;
+  uint8_t digest[SLH_MAX_M];
+
+  /* use Hmsg directly */
+  prm->mk_var(&var, pk, NULL, prm);
+  prm->h_msg(&var, digest, sig, m, m_sz, NULL, SLH_CTX_SZ_NO_CONTEXT);
+
+  return slh_verify_digest(&var, digest, sig, sig_sz, prm);
+}
+
+/* === Verifies a pure SLH-DSA signature. */
+/* Algorithm 24: slh_verify(M, SIG, ctx, PK) */
+
+int slh_verify(const uint8_t *m, size_t m_sz, const uint8_t *sig, size_t sig_sz,
+               const uint8_t *ctx, size_t ctx_sz, const uint8_t *pk,
+               const slh_param_t *prm)
+{
+  slh_var_t var;
+  uint8_t digest[SLH_MAX_M];
+
+  if (ctx_sz > 255)
+  {
+    return 0; /* false */
+  }
+
+  /* create the "pure" hash (with context) */
+  prm->mk_var(&var, pk, NULL, prm);
+  prm->h_msg(&var, digest, sig, m, m_sz, ctx, ctx_sz);
+
+  return slh_verify_digest(&var, digest, sig, sig_sz, prm);
+}
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_dsa.h b/src/sig/slh_dsa/slh_dsa_c/slh_dsa.h
new file mode 100644 (file)
index 0000000..61b5bb0
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 205 Stateless Hash-Based Digital Signature Standard. */
+/* API fo internal and "pure" variants. */
+
+#ifndef _SLH_DSA_H_
+#define _SLH_DSA_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stddef.h>
+#include <stdint.h>
+
+#ifndef _SLH_PARAM_H_
+  typedef struct slh_param_s slh_param_t;
+#endif
+
+  /* === SLH-DSA parameter sets */
+  extern const slh_param_t slh_dsa_sha2_128s;
+  extern const slh_param_t slh_dsa_shake_128s;
+  extern const slh_param_t slh_dsa_sha2_128f;
+  extern const slh_param_t slh_dsa_shake_128f;
+  extern const slh_param_t slh_dsa_sha2_192s;
+  extern const slh_param_t slh_dsa_shake_192s;
+  extern const slh_param_t slh_dsa_sha2_192f;
+  extern const slh_param_t slh_dsa_shake_192f;
+  extern const slh_param_t slh_dsa_sha2_256s;
+  extern const slh_param_t slh_dsa_shake_256s;
+  extern const slh_param_t slh_dsa_sha2_256f;
+  extern const slh_param_t slh_dsa_shake_256f;
+
+  /* === SLH_DSA API (_internal and _pure functions.) */
+  /* see slh_prehash.h for HashSLH functions */
+
+  /* Return standard identifier string for parameter set *prm, or NULL. */
+  const char *slh_alg_id(const slh_param_t *prm);
+
+  /* Return public (verification) key size in bytes for parameter set *prm. */
+  size_t slh_pk_sz(const slh_param_t *prm);
+
+  /* Return private (signing) key size in bytes for parameter set *prm. */
+  size_t slh_sk_sz(const slh_param_t *prm);
+
+  /* Return signature size in bytes for parameter set *prm. */
+  size_t slh_sig_sz(const slh_param_t *prm);
+
+  /* Generate an SLH-DSA key pair; needs an RBG (a "randombytes()" function) */
+  int slh_keygen(uint8_t *sk, uint8_t *pk, int (*rbg)(uint8_t *x, size_t xlen),
+                 const slh_param_t *prm);
+
+  int slh_keygen_internal(uint8_t *sk, uint8_t *pk, const uint8_t *sk_seed,
+                          const uint8_t *sk_prf, const uint8_t *pk_seed,
+                          const slh_param_t *prm);
+
+  /* Generate an SLH-DSA signature. */
+  size_t slh_sign_internal(uint8_t *sig, const uint8_t *m, size_t m_sz,
+                           const uint8_t *sk, const uint8_t *addrnd,
+                           const slh_param_t *prm);
+
+  size_t slh_sign(uint8_t *sig, const uint8_t *m, size_t m_sz,
+                  const uint8_t *ctx, size_t ctx_sz, const uint8_t *sk,
+                  const uint8_t *addrnd, const slh_param_t *prm);
+
+  /* Verify an SLH-DSA signature. */
+  /* return 0 on verification failure, 1 on success */
+  int slh_verify_internal(const uint8_t *m, size_t m_sz, const uint8_t *sig,
+                          size_t sig_sz, const uint8_t *pk,
+                          const slh_param_t *prm);
+
+  int slh_verify(const uint8_t *m, size_t m_sz, const uint8_t *sig,
+                 size_t sig_sz, const uint8_t *ctx, size_t ctx_sz,
+                 const uint8_t *pk, const slh_param_t *prm);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* _SLH_DSA_H_ */
+#endif
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_param.h b/src/sig/slh_dsa/slh_dsa_c/slh_param.h
new file mode 100644 (file)
index 0000000..5380977
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === Internal parameter definition structure. */
+
+#ifndef _SLH_PARAM_H_
+#define _SLH_PARAM_H_
+
+#include "plat_local.h"
+
+/* address */
+typedef union
+{
+  uint8_t u8[32];
+  uint32_t u32[8];
+} adrs_t;
+
+/* Parameter sets */
+
+#ifndef _SLH_DSA_H_
+typedef struct slh_param_s slh_param_t;
+#endif
+typedef struct slh_var_s slh_var_t;
+
+/* used to indicate _internal mode */
+#define SLH_CTX_SZ_NO_CONTEXT 0x100
+
+struct slh_param_s
+{
+  const char *alg_id; /* Algorithm name */
+
+  /* core parameters */
+  uint32_t n;    /* Security level / hash size { 16,24,32 }. */
+  uint32_t h;    /* Bits h used to select FORS key. */
+  uint32_t d;    /* Number of hypertree layers d. */
+  uint32_t hp;   /* Merkle tree height h' (XMSS). */
+  uint32_t a;    /* String length t = 2**a (FORS). */
+  uint32_t k;    /* Number of indices (FORS). */
+  uint32_t lg_w; /* Number of bits in chain index (WOTS+) */
+  uint32_t m;    /* Length in bytes of message digest. */
+
+  /* hash function instantation */
+  void (*mk_var)(slh_var_t *var, const uint8_t *pk, const uint8_t *sk,
+                 const slh_param_t *prm);
+  void (*chain)(slh_var_t *var, uint8_t *tmp, const uint8_t *x, uint32_t i,
+                uint32_t s);
+  void (*wots_chain)(slh_var_t *var, uint8_t *tmp, uint32_t s);
+  void (*fors_hash)(slh_var_t *var, uint8_t *tmp, uint32_t s);
+  void (*h_msg)(slh_var_t *var, uint8_t *h, const uint8_t *r, const uint8_t *m,
+                size_t m_sz, const uint8_t *ctx, size_t ctx_sz);
+  void (*prf)(slh_var_t *var, uint8_t *h);
+  void (*prf_msg)(slh_var_t *var, uint8_t *h, const uint8_t *opt_rand,
+                  const uint8_t *m, size_t m_sz, const uint8_t *ctx,
+                  size_t ctx_sz);
+  void (*h_f)(slh_var_t *var, uint8_t *h, const uint8_t *m1);
+  void (*h_h)(slh_var_t *var, uint8_t *h, const uint8_t *m1, const uint8_t *m2);
+  void (*h_t)(slh_var_t *var, uint8_t *h, const uint8_t *m, size_t m_sz);
+};
+
+/* _SLH_PARAM_H_ */
+#endif
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_prehash.c b/src/sig/slh_dsa/slh_dsa_c/slh_prehash.c
new file mode 100644 (file)
index 0000000..50fe2d9
--- /dev/null
@@ -0,0 +1,189 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+#include "slh_prehash.h"
+#include <string.h>
+#include "sha2_api.h"
+#include "sha3_api.h"
+#include "slh_dsa.h"
+#include "slh_var.h"
+
+#include <stdio.h>
+
+#define SLH_PREHASH_MAX_MP 512
+
+/* shared formatting routine for alg 23 and alg 25 */
+
+static size_t hash_slh_dsa_pad(uint8_t *mp, const uint8_t *m, size_t m_sz,
+                               const uint8_t *ctx, size_t ctx_sz,
+                               const char *ph)
+{
+  size_t mp_sz = 0;
+
+  const uint8_t sha2_256_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                    0x65, 0x03, 0x04, 0x02, 0x01};
+  const uint8_t sha2_384_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                    0x65, 0x03, 0x04, 0x02, 0x02};
+  const uint8_t sha2_512_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                    0x65, 0x03, 0x04, 0x02, 0x03};
+  const uint8_t sha2_224_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                    0x65, 0x03, 0x04, 0x02, 0x04};
+  const uint8_t sha2_512_224_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                        0x65, 0x03, 0x04, 0x02, 0x05};
+  const uint8_t sha2_512_256_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                        0x65, 0x03, 0x04, 0x02, 0x06};
+  const uint8_t sha3_224_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                    0x65, 0x03, 0x04, 0x02, 0x07};
+  const uint8_t sha3_256_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                    0x65, 0x03, 0x04, 0x02, 0x08};
+  const uint8_t sha3_384_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                    0x65, 0x03, 0x04, 0x02, 0x09};
+  const uint8_t sha3_512_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                    0x65, 0x03, 0x04, 0x02, 0x0A};
+  const uint8_t shake_128_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                     0x65, 0x03, 0x04, 0x02, 0x0B};
+  const uint8_t shake_256_oid[11] = {0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+                                     0x65, 0x03, 0x04, 0x02, 0x0C};
+
+  if (ctx_sz > 255)
+  {
+    return 0;
+  }
+
+  mp[0] = 1;
+  mp[1] = ctx_sz & 0xFF;
+  memcpy(mp + 2, ctx, ctx_sz);
+  mp_sz = 2 + ctx_sz;
+
+  if (strcmp(ph, "SHA2-256") == 0)
+  {
+    memcpy(mp + mp_sz, sha2_256_oid, 11);
+    mp_sz += 11;
+    sha2_256(mp + mp_sz, m, m_sz);
+    mp_sz += 32;
+  }
+  else if (strcmp(ph, "SHA2-384") == 0)
+  {
+    memcpy(mp + mp_sz, sha2_384_oid, 11);
+    mp_sz += 11;
+    sha2_384(mp + mp_sz, m, m_sz);
+    mp_sz += 48;
+  }
+  else if (strcmp(ph, "SHA2-512") == 0)
+  {
+    memcpy(mp + mp_sz, sha2_512_oid, 11);
+    mp_sz += 11;
+    sha2_512(mp + mp_sz, m, m_sz);
+    mp_sz += 64;
+  }
+  else if (strcmp(ph, "SHA2-224") == 0)
+  {
+    memcpy(mp + mp_sz, sha2_224_oid, 11);
+    mp_sz += 11;
+    sha2_224(mp + mp_sz, m, m_sz);
+    mp_sz += 28;
+  }
+  else if (strcmp(ph, "SHA2-512/224") == 0)
+  {
+    memcpy(mp + mp_sz, sha2_512_224_oid, 11);
+    mp_sz += 11;
+    sha2_512_224(mp + mp_sz, m, m_sz);
+    mp_sz += 28;
+  }
+  else if (strcmp(ph, "SHA2-512/256") == 0)
+  {
+    memcpy(mp + mp_sz, sha2_512_256_oid, 11);
+    mp_sz += 11;
+    sha2_512_256(mp + mp_sz, m, m_sz);
+    mp_sz += 32;
+  }
+  else if (strcmp(ph, "SHA3-224") == 0)
+  {
+    memcpy(mp + mp_sz, sha3_224_oid, 11);
+    mp_sz += 11;
+    sha3(mp + mp_sz, 28, m, m_sz);
+    mp_sz += 28;
+  }
+  else if (strcmp(ph, "SHA3-256") == 0)
+  {
+    memcpy(mp + mp_sz, sha3_256_oid, 11);
+    mp_sz += 11;
+    sha3(mp + mp_sz, 32, m, m_sz);
+    mp_sz += 32;
+  }
+  else if (strcmp(ph, "SHA3-384") == 0)
+  {
+    memcpy(mp + mp_sz, sha3_384_oid, 11);
+    mp_sz += 11;
+    sha3(mp + mp_sz, 48, m, m_sz);
+    mp_sz += 48;
+  }
+  else if (strcmp(ph, "SHA3-512") == 0)
+  {
+    memcpy(mp + mp_sz, sha3_512_oid, 11);
+    mp_sz += 11;
+    sha3(mp + mp_sz, 64, m, m_sz);
+    mp_sz += 64;
+  }
+  else if (strcmp(ph, "SHAKE-128") == 0)
+  {
+    memcpy(mp + mp_sz, shake_128_oid, 11);
+    mp_sz += 11;
+    shake128(mp + mp_sz, 32, m, m_sz);
+    mp_sz += 32;
+  }
+  else if (strcmp(ph, "SHAKE-256") == 0)
+  {
+    memcpy(mp + mp_sz, shake_256_oid, 11);
+    mp_sz += 11;
+    shake256(mp + mp_sz, 64, m, m_sz);
+    mp_sz += 64;
+  }
+  else
+  {
+    return 0;
+  }
+
+  return mp_sz;
+}
+
+/* === Generates a pre-hash SLH-DSA signature. */
+/* Algorithm 23: hash_slh_sign(M, ctx, PH, SK) */
+
+size_t hash_slh_sign(uint8_t *sig, const uint8_t *m, size_t m_sz,
+                     const uint8_t *ctx, size_t ctx_sz, const char *ph,
+                     const uint8_t *sk, const uint8_t *addrnd,
+                     const slh_param_t *prm)
+{
+  uint8_t mp[SLH_PREHASH_MAX_MP];
+  size_t mp_sz;
+
+  mp_sz = hash_slh_dsa_pad(mp, m, m_sz, ctx, ctx_sz, ph);
+  if (mp_sz == 0)
+  {
+    return 0;
+  }
+
+  return slh_sign_internal(sig, mp, mp_sz, sk, addrnd, prm);
+}
+
+/* === Verifies a pre-hash SLH-DSA signature. */
+/* Algorithm 25: hash_slh_verify(M, SIG, ctx, PH, PK) */
+
+int hash_slh_verify(const uint8_t *m, size_t m_sz, const uint8_t *sig,
+                    size_t sig_sz, const uint8_t *ctx, size_t ctx_sz,
+                    const char *ph, const uint8_t *pk, const slh_param_t *prm)
+{
+  uint8_t mp[SLH_PREHASH_MAX_MP];
+  size_t mp_sz;
+
+  mp_sz = hash_slh_dsa_pad(mp, m, m_sz, ctx, ctx_sz, ph);
+  if (mp_sz == 0)
+  {
+    return 0; /* false */
+  }
+
+  return slh_verify_internal(mp, mp_sz, sig, sig_sz, pk, prm);
+}
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_prehash.h b/src/sig/slh_dsa/slh_dsa_c/slh_prehash.h
new file mode 100644 (file)
index 0000000..33c59f5
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === FIPS 205 Stateless Hash-Based Digital Signature Standard. */
+/* HashSLH functions */
+
+#ifndef _SLH_PREHASH_H_
+#define _SLH_PREHASH_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include "slh_dsa.h"
+
+  /* === Generates a pre-hash SLH-DSA signature. */
+  /* Algorithm 23: Algorithm 23 hash_slh_sign(M, ctx, PH, SK) */
+
+  size_t hash_slh_sign(uint8_t *sig, const uint8_t *m, size_t m_sz,
+                       const uint8_t *ctx, size_t ctx_sz, const char *ph,
+                       const uint8_t *sk, const uint8_t *addrnd,
+                       const slh_param_t *prm);
+
+  /* === Verifies a pre-hash SLH-DSA signature. */
+  /* Algorithm 25: hash_slh_verify(M, SIG, ctx, PH, PK) */
+
+  int hash_slh_verify(const uint8_t *m, size_t m_sz, const uint8_t *sig,
+                      size_t sig_sz, const uint8_t *ctx, size_t ctx_sz,
+                      const char *ph, const uint8_t *pk,
+                      const slh_param_t *prm);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* _SLH_PREHASH_H_ */
+#endif
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_sha2.c b/src/sig/slh_dsa/slh_dsa_c/slh_sha2.c
new file mode 100644 (file)
index 0000000..8e1ab01
--- /dev/null
@@ -0,0 +1,581 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === Portable C code: Functions for instantiation of SLH-DSA with SHA2 */
+
+#include <string.h>
+#include "plat_local.h"
+#include "sha2_api.h"
+#include "slh_adrs.h"
+#include "slh_var.h"
+
+/* Cat 1: Hmsg(R, PK.seed, PK.root, M) = */
+/* MGF1-SHA-256(R || PK.seed || SHA-256(R ||PK.seed || PK.root || */
+/* M), m) */
+
+static void sha2_256_h_msg(slh_var_t *var, uint8_t *h, const uint8_t *r,
+                           const uint8_t *m, size_t m_sz, const uint8_t *ctx,
+                           size_t ctx_sz)
+{
+  sha2_256_t sha2;
+  size_t i;
+  size_t n = var->prm->n;
+  uint8_t buf[16 + 16 + 32 + 4];
+  size_t mgf_sz;
+  uint8_t *ctr;
+
+  /* SHA-256(R || PK.seed || PK.root || M) */
+  sha2_256_init(&sha2);
+  sha2_256_update(&sha2, r, n);
+  sha2_256_update(&sha2, var->pk_seed, n);
+  sha2_256_update(&sha2, var->pk_root, n);
+
+  /* add "pure" domain separator and context, if supplied */
+  if (ctx_sz != SLH_CTX_SZ_NO_CONTEXT)
+  {
+    buf[0] = 0;
+    buf[1] = ctx_sz & 0xFF;
+    sha2_256_update(&sha2, buf, 2);
+    sha2_256_update(&sha2, ctx, ctx_sz);
+  }
+  /* message */
+  sha2_256_update(&sha2, m, m_sz);
+  sha2_256_final(&sha2, buf + 2 * n);
+
+  /* MGF1-SHA-256(R || PK.seed || .. */
+  memcpy(buf, r, n);
+  memcpy(buf + n, var->pk_seed, n);
+
+  mgf_sz = 2 * n + 32 + 4;
+  ctr = buf + mgf_sz - 4;
+
+  /* MGF1 counter mode */
+  for (i = 0; i < var->prm->m; i += 32)
+  {
+    uint32_t c = i / 32;
+    ctr[0] = c >> 24;
+    ctr[1] = (c >> 16) & 0xFF;
+    ctr[2] = (c >> 8) & 0xFF;
+    ctr[3] = c & 0xFF;
+
+    sha2_256_init(&sha2);
+    sha2_256_update(&sha2, buf, mgf_sz);
+    if ((var->prm->m - i) >= 32)
+    {
+      sha2_256_final(&sha2, h + i);
+    }
+    else
+    {
+      sha2_256_final(&sha2, buf);
+      memcpy(h + i, buf, var->prm->m - i);
+    }
+  }
+}
+
+/* Cat 3, 5: Hmsg(R, PK.seed, PK.root, M) = */
+/* MGF1-SHA-512(R || PK.seed || SHA-512(R || PK.seed || PK.root || */
+/* M), m) */
+
+static void sha2_512_h_msg(slh_var_t *var, uint8_t *h, const uint8_t *r,
+                           const uint8_t *m, size_t m_sz, const uint8_t *ctx,
+                           size_t ctx_sz)
+{
+  size_t i;
+  sha2_512_t sha2;
+  uint8_t buf[32 + 32 + 64 + 4];
+  size_t mgf_sz;
+  uint8_t *ctr;
+  size_t n = var->prm->n;
+
+  /* SHA-512(R || PK.seed || PK.root || M) */
+  sha2_512_init(&sha2);
+  sha2_512_update(&sha2, r, n);
+  sha2_512_update(&sha2, var->pk_seed, n);
+  sha2_512_update(&sha2, var->pk_root, n);
+
+  /* add "pure" domain separator and context, if supplied */
+  if (ctx_sz != SLH_CTX_SZ_NO_CONTEXT)
+  {
+    buf[0] = 0;
+    buf[1] = ctx_sz & 0xFF;
+    sha2_512_update(&sha2, buf, 2);
+    sha2_512_update(&sha2, ctx, ctx_sz);
+  }
+  sha2_512_update(&sha2, m, m_sz);
+  sha2_512_final(&sha2, buf + 2 * n);
+
+  /* MGF1-SHA-512(R || PK.seed || .. */
+  memcpy(buf, r, n);
+  memcpy(buf + n, var->pk_seed, n);
+
+  mgf_sz = 2 * n + 64 + 4;
+  ctr = buf + mgf_sz - 4;
+
+  /* MGF1 counter mode */
+  for (i = 0; i < var->prm->m; i += 64)
+  {
+    uint32_t c = i / 64;
+    ctr[0] = c >> 24;
+    ctr[1] = (c >> 16) & 0xFF;
+    ctr[2] = (c >> 8) & 0xFF;
+    ctr[3] = c & 0xFF;
+
+    sha2_512_init(&sha2);
+    sha2_512_update(&sha2, buf, mgf_sz);
+    if ((var->prm->m - i) >= 64)
+    {
+      sha2_512_final(&sha2, h + i);
+    }
+    else
+    {
+      sha2_512_final(&sha2, buf);
+      memcpy(h + i, buf, var->prm->m - i);
+    }
+  }
+}
+
+/* insert ARDSc. */
+
+static void sha2_256_adrsc(sha2_256_t *sha2, const slh_var_t *var)
+{
+  uint8_t buf[22];
+  adrsc_22(var, buf);
+  sha2_256_update(sha2, buf, 22);
+}
+
+static void sha2_512_adrsc(sha2_512_t *sha2, const slh_var_t *var)
+{
+  uint8_t buf[22];
+  adrsc_22(var, buf);
+  sha2_512_update(sha2, buf, 22);
+}
+
+/* Cat 1, 3, 5: PRF(PK.seed, SK.seed, ADRS) = */
+/* Trunc_n(SHA-256(PK.seed || toByte(0, 64 âˆ’ n) || ADRSc || */
+/* SK.seed)) */
+
+static void sha2_256_prf(slh_var_t *var, uint8_t *h)
+{
+  sha2_256_t sha2;
+  size_t n = var->prm->n;
+
+  sha2_256_copy(&sha2, &var->sha2_256_pk_seed);
+  sha2_256_adrsc(&sha2, var);
+  sha2_256_update(&sha2, var->sk_seed, n);
+  sha2_256_final_pad(&sha2);
+  sha2_256_compress(sha2.s);
+  memcpy(h, sha2.s, n);
+}
+
+/* Cat 1: PRFmsg(SK.prf, opt_rand, M) = */
+/* Trunc_n(HMAC-SHA-256(SK.prf, opt_rand || M)) */
+
+static void sha2_256_prf_msg(slh_var_t *var, uint8_t *h,
+                             const uint8_t *opt_rand, const uint8_t *m,
+                             size_t m_sz, const uint8_t *ctx, size_t ctx_sz)
+{
+  unsigned i;
+  sha2_256_t sha2;
+  uint8_t pad[64], buf[32];
+  size_t n = var->prm->n;
+
+  /* ipad */
+  memcpy(pad, var->sk_prf, n);
+  for (i = 0; i < n; i++)
+  {
+    pad[i] ^= 0x36;
+  }
+  memset(pad + n, 0x36, 64 - n);
+
+  sha2_256_init(&sha2);
+  sha2_256_update(&sha2, pad, 64);
+  sha2_256_update(&sha2, opt_rand, n);
+
+  /* add "pure" domain separator and context, if supplied */
+  if (ctx_sz != SLH_CTX_SZ_NO_CONTEXT)
+  {
+    buf[0] = 0;
+    buf[1] = ctx_sz & 0xFF;
+    sha2_256_update(&sha2, buf, 2);
+    sha2_256_update(&sha2, ctx, ctx_sz);
+  }
+  sha2_256_update(&sha2, m, m_sz);
+  sha2_256_final(&sha2, buf);
+
+  /* opad */
+  for (i = 0; i < 64; i++)
+  {
+    pad[i] ^= 0x36 ^ 0x5C;
+  }
+
+  sha2_256_init(&sha2);
+  sha2_256_update(&sha2, pad, 64);
+  sha2_256_update(&sha2, buf, 32);
+  sha2_256_final_len(&sha2, h, n);
+}
+
+/* Cat 3, 5: PRFmsg(SK.prf, opt_rand, M) = */
+/* Trunc_n(HMAC-SHA-512(SK.prf, opt_rand || M)) */
+
+static void sha2_512_prf_msg(slh_var_t *var, uint8_t *h,
+                             const uint8_t *opt_rand, const uint8_t *m,
+                             size_t m_sz, const uint8_t *ctx, size_t ctx_sz)
+{
+  unsigned i;
+  sha2_512_t sha2;
+  uint8_t pad[128], buf[64];
+  size_t n = var->prm->n;
+
+  /* ipad */
+  memcpy(pad, var->sk_prf, n);
+  for (i = 0; i < n; i++)
+  {
+    pad[i] ^= 0x36;
+  }
+  memset(pad + n, 0x36, 128 - n);
+
+  sha2_512_init(&sha2);
+  sha2_512_update(&sha2, pad, 128);
+  sha2_512_update(&sha2, opt_rand, n);
+
+  /* add "pure" domain separator and context, if supplied */
+  if (ctx_sz != SLH_CTX_SZ_NO_CONTEXT)
+  {
+    buf[0] = 0;
+    buf[1] = ctx_sz & 0xFF;
+    sha2_512_update(&sha2, buf, 2);
+    sha2_512_update(&sha2, ctx, ctx_sz);
+  }
+  sha2_512_update(&sha2, m, m_sz);
+  sha2_512_final(&sha2, buf);
+
+  /* opad */
+  for (i = 0; i < 128; i++)
+  {
+    pad[i] ^= 0x36 ^ 0x5C;
+  }
+
+  sha2_512_init(&sha2);
+  sha2_512_update(&sha2, pad, 128);
+  sha2_512_update(&sha2, buf, 64);
+  sha2_512_final_len(&sha2, h, n);
+}
+
+/* Cat 1: T_l(PK.seed, ADRS, M1 ) = */
+/* Trunc_n(SHA-256(PK.seed || toByte(0, 64 âˆ’ n) || ADRSc || Ml )) */
+
+static void sha2_256_tl(slh_var_t *var, uint8_t *h, const uint8_t *m,
+                        size_t m_sz)
+{
+  sha2_256_t sha2;
+  size_t n = var->prm->n;
+
+  sha2_256_copy(&sha2, &var->sha2_256_pk_seed);
+  sha2_256_adrsc(&sha2, var);
+  sha2_256_update(&sha2, m, m_sz);
+  sha2_256_final_len(&sha2, h, n);
+}
+
+/* Cat 1: F(PK.seed, ADRS, M1 ) = */
+/* Trunc_n(SHA-256(PK.seed || toByte(0, 64 âˆ’ n) || ADRSc || M1 )) */
+
+static void sha2_256_f(slh_var_t *var, uint8_t *h, const uint8_t *m1)
+{
+  sha2_256_tl(var, h, m1, var->prm->n);
+}
+
+/* Cat 1: H(PK.seed, ADRS, M2 ) = */
+/* Trunc_n(SHA-256(PK.seed || toByte(0, 64 âˆ’ n) || ADRSc || M2 )) */
+
+static void sha2_256_h(slh_var_t *var, uint8_t *h, const uint8_t *m1,
+                       const uint8_t *m2)
+{
+  sha2_256_t sha2;
+  size_t n = var->prm->n;
+
+  sha2_256_copy(&sha2, &var->sha2_256_pk_seed);
+  sha2_256_adrsc(&sha2, var);
+  sha2_256_update(&sha2, m1, n);
+  sha2_256_update(&sha2, m2, n);
+  sha2_256_final_len(&sha2, h, n);
+}
+
+/* Cat 3, 5: Tl(PK.seed, ADRS, Ml ) = */
+/* Trunc_n(SHA-512(PK.seed || toByte(0, 128 âˆ’ n) || ADRSc || Ml )) */
+
+static void sha2_512_tl(slh_var_t *var, uint8_t *h, const uint8_t *m,
+                        size_t m_sz)
+{
+  sha2_512_t sha2;
+  size_t n = var->prm->n;
+
+  sha2_512_copy(&sha2, &var->sha2_512_pk_seed);
+  sha2_512_adrsc(&sha2, var);
+  sha2_512_update(&sha2, m, m_sz);
+  sha2_512_final_len(&sha2, h, n);
+}
+
+/* Cat 3, 5: H(PK.seed, ADRS, M2 ) = */
+/* Trunc_n(SHA-512(PK.seed || toByte(0, 128 âˆ’ n) || ADRSc || M2 )) */
+
+static void sha2_512_h(slh_var_t *var, uint8_t *h, const uint8_t *m1,
+                       const uint8_t *m2)
+{
+  sha2_512_t sha2;
+  size_t n = var->prm->n;
+
+  sha2_512_copy(&sha2, &var->sha2_512_pk_seed);
+  sha2_512_adrsc(&sha2, var);
+  sha2_512_update(&sha2, m1, n);
+  sha2_512_update(&sha2, m2, n);
+  sha2_512_final_len(&sha2, h, n);
+}
+
+/* create a context */
+
+static void sha2_mk_var(slh_var_t *var, const uint8_t *pk, const uint8_t *sk,
+                        const slh_param_t *prm)
+{
+  uint8_t buf[128 - 24];
+  size_t n = prm->n;
+  var->prm = prm;
+
+  var->prm = prm; /* store fixed parameters */
+  if (sk != NULL)
+  {
+    memcpy(var->sk_seed, sk, n);
+    memcpy(var->sk_prf, sk + n, n);
+    memcpy(var->pk_seed, sk + 2 * n, n);
+    memcpy(var->pk_root, sk + 3 * n, n);
+  }
+  else if (pk != NULL)
+  {
+    memcpy(var->pk_seed, pk, n);
+    memcpy(var->pk_root, pk + n, n);
+  }
+
+  /* eliminate the first compression function */
+  memset(buf, 0x00, sizeof(buf));
+  sha2_256_init(&var->sha2_256_pk_seed);
+  sha2_256_update(&var->sha2_256_pk_seed, var->pk_seed, n);
+  sha2_256_update(&var->sha2_256_pk_seed, buf, 64 - n);
+
+  if (n > 16)
+  {
+    sha2_512_init(&var->sha2_512_pk_seed);
+    sha2_512_update(&var->sha2_512_pk_seed, var->pk_seed, n);
+    sha2_512_update(&var->sha2_512_pk_seed, buf, 128 - n);
+  }
+
+  /* local ADRS buffer */
+  var->adrs = &var->t_adrs;
+}
+
+/* === Chaining function used in WOTS+ */
+/* Algorithm 5: chain(X, i, s, PK.seed, ADRS) */
+
+static void sha2_256_chain(slh_var_t *var, uint8_t *tmp, const uint8_t *x,
+                           uint32_t i, uint32_t s)
+{
+  uint32_t j;
+  size_t n = var->prm->n;
+  sha2_256_t sha2;
+  uint32_t sp[8 + 24];
+  uint8_t *mp = (uint8_t *)&sp[8];
+  uint8_t *op = (uint8_t *)&sha2.s[8];
+
+  /* these cases exist */
+  if (s == 0)
+  {
+    memcpy(tmp, x, n);
+    return;
+  }
+
+  /* set initial address */
+  adrs_set_hash_address(var, i);
+
+  /* initial set-up */
+  sha2_256_copy(&sha2, &var->sha2_256_pk_seed);
+  sha2_256_adrsc(&sha2, var);
+  sha2_256_update(&sha2, x, n);
+  if (s == 1)
+  {
+    /* just one hash */
+    sha2_256_final_len(&sha2, tmp, n);
+    return;
+  }
+  sha2_256_final_pad(&sha2);
+  memcpy(sp, sha2.s, sizeof(sp));
+  sha2_256_compress(sp);
+
+  /* iteration */
+  for (j = 1; j < s; j++)
+  {
+    memcpy(mp + 22, sp, n);        /* copy result back to input */
+    slh_tobyte(mp + 18, i + j, 4); /* hash address, last part of ADSc */
+    memcpy(sp, sha2.s, 32 + 18);   /* PK.seed compressed, start of ADRSc */
+    memcpy(mp + 22 + n, op + 22 + n, 64 - 22 - n); /* padding */
+    sha2_256_compress(sp);
+  }
+
+  /* final output */
+  memcpy(tmp, sp, n);
+}
+
+/* Combination WOTS PRF + Chain */
+
+static void sha2_256_wots_chain(slh_var_t *var, uint8_t *tmp, uint32_t s)
+{
+  /* PRF secret key */
+  adrs_set_type(var, ADRS_WOTS_PRF);
+  adrs_set_tree_index(var, 0);
+  sha2_256_prf(var, tmp);
+
+  /* chain */
+  adrs_set_type(var, ADRS_WOTS_HASH);
+  adrs_set_tree_index(var, 0);
+  sha2_256_chain(var, tmp, tmp, 0, s);
+}
+
+/* Combination FORS PRF + F (if s == 1) */
+
+static void sha2_256_fors_hash(slh_var_t *var, uint8_t *tmp, uint32_t s)
+{
+  /* PRF secret key */
+  adrs_set_type(var, ADRS_FORS_PRF);
+  adrs_set_tree_height(var, 0);
+  sha2_256_prf(var, tmp);
+
+  /* hash it again */
+  if (s == 1)
+  {
+    adrs_set_type(var, ADRS_FORS_TREE);
+    sha2_256_f(var, tmp, tmp);
+  }
+}
+
+/* 10.2.   SLH-DSA Using SHA2 for Security Category 1 */
+
+const slh_param_t slh_dsa_sha2_128s = {/* .alg_id = */ "SLH-DSA-SHA2-128s",
+                                       /* .n = */ 16,
+                                       /* .h = */ 63,
+                                       /* .d = */ 7,
+                                       /* .hp = */ 9,
+                                       /* .a = */ 12,
+                                       /* .k = */ 14,
+                                       /* .lg_w = */ 4,
+                                       /* .m = */ 30,
+                                       /* .mk_var = */ sha2_mk_var,
+                                       /* .chain = */ sha2_256_chain,
+                                       /* .wots_chain = */ sha2_256_wots_chain,
+                                       /* .fors_hash = */ sha2_256_fors_hash,
+                                       /* .h_msg = */ sha2_256_h_msg,
+                                       /* .prf = */ sha2_256_prf,
+                                       /* .prf_msg = */ sha2_256_prf_msg,
+                                       /* .h_f = */ sha2_256_f,
+                                       /* .h_h = */ sha2_256_h,
+                                       /* .h_t = */ sha2_256_tl};
+
+const slh_param_t slh_dsa_sha2_128f = {/* .alg_id = */ "SLH-DSA-SHA2-128f",
+                                       /* .n = */ 16,
+                                       /* .h = */ 66,
+                                       /* .d = */ 22,
+                                       /* .hp = */ 3,
+                                       /* .a = */ 6,
+                                       /* .k = */ 33,
+                                       /* .lg_w = */ 4,
+                                       /* .m = */ 34,
+                                       /* .mk_var = */ sha2_mk_var,
+                                       /* .chain = */ sha2_256_chain,
+                                       /* .wots_chain = */ sha2_256_wots_chain,
+                                       /* .fors_hash = */ sha2_256_fors_hash,
+                                       /* .h_msg = */ sha2_256_h_msg,
+                                       /* .prf = */ sha2_256_prf,
+                                       /* .prf_msg = */ sha2_256_prf_msg,
+                                       /* .h_f = */ sha2_256_f,
+                                       /* .h_h = */ sha2_256_h,
+                                       /* .h_t = */ sha2_256_tl};
+
+/* 10.3.   SLH-DSA Using SHA2 for Security Categories 3 and 5 */
+
+const slh_param_t slh_dsa_sha2_192s = {/* .alg_id = */ "SLH-DSA-SHA2-192s",
+                                       /* .n = */ 24,
+                                       /* .h = */ 63,
+                                       /* .d = */ 7,
+                                       /* .hp = */ 9,
+                                       /* .a = */ 14,
+                                       /* .k = */ 17,
+                                       /* .lg_w = */ 4,
+                                       /* .m = */ 39,
+                                       /* .mk_var = */ sha2_mk_var,
+                                       /* .chain = */ sha2_256_chain,
+                                       /* .wots_chain = */ sha2_256_wots_chain,
+                                       /* .fors_hash = */ sha2_256_fors_hash,
+                                       /* .h_msg = */ sha2_512_h_msg,
+                                       /* .prf = */ sha2_256_prf,
+                                       /* .prf_msg = */ sha2_512_prf_msg,
+                                       /* .h_f = */ sha2_256_f,
+                                       /* .h_h = */ sha2_512_h,
+                                       /* .h_t = */ sha2_512_tl};
+
+const slh_param_t slh_dsa_sha2_192f = {/* .alg_id = */ "SLH-DSA-SHA2-192f",
+                                       /* .n = */ 24,
+                                       /* .h = */ 66,
+                                       /* .d = */ 22,
+                                       /* .hp = */ 3,
+                                       /* .a = */ 8,
+                                       /* .k = */ 33,
+                                       /* .lg_w = */ 4,
+                                       /* .m = */ 42,
+                                       /* .mk_var = */ sha2_mk_var,
+                                       /* .chain = */ sha2_256_chain,
+                                       /* .wots_chain = */ sha2_256_wots_chain,
+                                       /* .fors_hash = */ sha2_256_fors_hash,
+                                       /* .h_msg = */ sha2_512_h_msg,
+                                       /* .prf = */ sha2_256_prf,
+                                       /* .prf_msg = */ sha2_512_prf_msg,
+                                       /* .h_f = */ sha2_256_f,
+                                       /* .h_h = */ sha2_512_h,
+                                       /* .h_t = */ sha2_512_tl};
+
+const slh_param_t slh_dsa_sha2_256s = {/* .alg_id = */ "SLH-DSA-SHA2-256s",
+                                       /* .n = */ 32,
+                                       /* .h = */ 64,
+                                       /* .d = */ 8,
+                                       /* .hp = */ 8,
+                                       /* .a = */ 14,
+                                       /* .k = */ 22,
+                                       /* .lg_w = */ 4,
+                                       /* .m = */ 47,
+                                       /* .mk_var = */ sha2_mk_var,
+                                       /* .chain = */ sha2_256_chain,
+                                       /* .wots_chain = */ sha2_256_wots_chain,
+                                       /* .fors_hash = */ sha2_256_fors_hash,
+                                       /* .h_msg = */ sha2_512_h_msg,
+                                       /* .prf = */ sha2_256_prf,
+                                       /* .prf_msg = */ sha2_512_prf_msg,
+                                       /* .h_f = */ sha2_256_f,
+                                       /* .h_h = */ sha2_512_h,
+                                       /* .h_t = */ sha2_512_tl};
+
+const slh_param_t slh_dsa_sha2_256f = {/* .alg_id = */ "SLH-DSA-SHA2-256f",
+                                       /* .n = */ 32,
+                                       /* .h = */ 68,
+                                       /* .d = */ 17,
+                                       /* .hp = */ 4,
+                                       /* .a = */ 9,
+                                       /* .k = */ 35,
+                                       /* .lg_w = */ 4,
+                                       /* .m = */ 49,
+                                       /* .mk_var = */ sha2_mk_var,
+                                       /* .chain = */ sha2_256_chain,
+                                       /* .wots_chain = */ sha2_256_wots_chain,
+                                       /* .fors_hash = */ sha2_256_fors_hash,
+                                       /* .h_msg = */ sha2_512_h_msg,
+                                       /* .prf = */ sha2_256_prf,
+                                       /* .prf_msg = */ sha2_512_prf_msg,
+                                       /* .h_f = */ sha2_256_f,
+                                       /* .h_h = */ sha2_512_h,
+                                       /* .h_t = */ sha2_512_tl};
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_shake.c b/src/sig/slh_dsa/slh_dsa_c/slh_shake.c
new file mode 100644 (file)
index 0000000..3598213
--- /dev/null
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === Portable C code: Functions for instantiation of SLH-DSA with SHAKE */
+
+#include "sha3_api.h"
+#include "slh_adrs.h"
+#include "slh_var.h"
+
+/* === 10.1.   SLH-DSA Using SHAKE */
+
+/* Hmsg(R, PK.seed, PK.root, M) = SHAKE256(R || PK.seed || PK.root || M, */
+/* 8m) */
+
+static void shake_h_msg(slh_var_t *var, uint8_t *h, const uint8_t *r,
+                        const uint8_t *m, size_t m_sz, const uint8_t *ctx,
+                        size_t ctx_sz)
+{
+  sha3_var_t sha3;
+  size_t n = var->prm->n;
+  uint8_t buf[2];
+
+  shake256_init(&sha3);
+  shake_update(&sha3, r, n);
+  shake_update(&sha3, var->pk_seed, n);
+  shake_update(&sha3, var->pk_root, n);
+
+  /* add "pure" domain separator and context, if supplied */
+  if (ctx_sz != SLH_CTX_SZ_NO_CONTEXT)
+  {
+    buf[0] = 0;
+    buf[1] = ctx_sz & 0xFF;
+    shake_update(&sha3, buf, 2);
+    shake_update(&sha3, ctx, ctx_sz);
+  }
+  shake_update(&sha3, m, m_sz);
+
+  shake_out(&sha3, h, var->prm->m);
+}
+
+/* F(PK.seed, ADRS, M1 ) = SHAKE256(PK.seed || ADRS || M1, 8n) */
+
+static void shake_f(slh_var_t *var, uint8_t *h, const uint8_t *m1)
+{
+  sha3_var_t sha3;
+  size_t n = var->prm->n;
+
+  shake256_init(&sha3);
+  shake_update(&sha3, var->pk_seed, n);
+  shake_update(&sha3, (const uint8_t *)var->adrs->u8, 32);
+  shake_update(&sha3, m1, n);
+
+  shake_out(&sha3, h, n);
+}
+
+/* PRF(PK.seed, SK.seed, ADRS) = SHAKE256(PK.seed || ADRS || SK.seed, 8n) */
+
+static void shake_prf(slh_var_t *var, uint8_t *h)
+{
+  shake_f(var, h, var->sk_seed);
+}
+
+/* PRFmsg (SK.prf, opt_rand, M) = SHAKE256(SK.prf || opt_rand || M, 8n) */
+
+static void shake_prf_msg(slh_var_t *var, uint8_t *h, const uint8_t *opt_rand,
+                          const uint8_t *m, size_t m_sz, const uint8_t *ctx,
+                          size_t ctx_sz)
+
+{
+  sha3_var_t sha3;
+  size_t n = var->prm->n;
+  uint8_t buf[2];
+
+  shake256_init(&sha3);
+  shake_update(&sha3, var->sk_prf, n);
+  shake_update(&sha3, opt_rand, n);
+
+  /* add "pure" domain separator and context, if supplied */
+  if (ctx_sz != SLH_CTX_SZ_NO_CONTEXT)
+  {
+    buf[0] = 0;
+    buf[1] = ctx_sz & 0xFF;
+    shake_update(&sha3, buf, 2);
+    shake_update(&sha3, ctx, ctx_sz);
+  }
+  shake_update(&sha3, m, m_sz);
+
+  shake_out(&sha3, h, n);
+}
+
+/* T_l(PK.seed, ADRS, M ) = SHAKE256(PK.seed || ADRS || Ml, 8n) */
+
+static void shake_t(slh_var_t *var, uint8_t *h, const uint8_t *m, size_t m_sz)
+{
+  sha3_var_t sha3;
+  size_t n = var->prm->n;
+
+  shake256_init(&sha3);
+  shake_update(&sha3, var->pk_seed, n);
+  shake_update(&sha3, (const uint8_t *)var->adrs->u8, 32);
+  shake_update(&sha3, m, m_sz);
+
+  shake_out(&sha3, h, n);
+}
+
+/* H(PK.seed, ADRS, M2 ) = SHAKE256(PK.seed || ADRS || M2, 8n) */
+
+static void shake_h(slh_var_t *var, uint8_t *h, const uint8_t *m1,
+                    const uint8_t *m2)
+{
+  sha3_var_t sha3;
+  size_t n = var->prm->n;
+
+  shake256_init(&sha3);
+  shake_update(&sha3, var->pk_seed, n);
+  shake_update(&sha3, (const uint8_t *)var->adrs->u8, 32);
+  shake_update(&sha3, m1, n);
+  shake_update(&sha3, m2, n);
+
+  shake_out(&sha3, h, n);
+}
+
+/* create a context */
+
+static void shake_mk_var(slh_var_t *var, const uint8_t *pk, const uint8_t *sk,
+                         const slh_param_t *prm)
+{
+  size_t n = prm->n;
+
+  var->prm = prm; /* store fixed parameters */
+  if (sk != NULL)
+  {
+    memcpy(var->sk_seed, sk, n);
+    memcpy(var->sk_prf, sk + n, n);
+    memcpy(var->pk_seed, sk + 2 * n, n);
+    memcpy(var->pk_root, sk + 3 * n, n);
+  }
+  else if (pk != NULL)
+  {
+    memcpy(var->pk_seed, pk, n);
+    memcpy(var->pk_root, pk + n, n);
+  }
+
+  /* local ADRS buffer */
+  var->adrs = &var->t_adrs;
+}
+
+/* === Chaining function used in WOTS+ */
+/* Algorithm 5: chain(X, i, s, PK.seed, ADRS) */
+
+/* chaining by processor (some optimizations) */
+
+static void shake_chain(slh_var_t *var, uint8_t *tmp, const uint8_t *x,
+                        uint32_t i, uint32_t s)
+{
+  uint32_t j, k;
+  uint64_t ks[25];
+  size_t n = var->prm->n;
+  const uint32_t r = (1600 - 256 * 2) / 64; /* SHAKE256 rate */
+  uint32_t n8 = n / 8;                      /* number of words */
+  uint32_t h = n8 + (32 / 8);               /* static part len */
+  uint32_t l = h + n8;                      /* input length */
+
+  if (s == 0)
+  { /* no-op */
+    memcpy(tmp, x, n);
+    return;
+  }
+
+  memcpy(ks + h, x, n); /* start node */
+  for (j = 0; j < s; j++)
+  {
+    if (j > 0)
+    {
+      memcpy(ks + h, ks, n); /* chaining */
+    }
+    memcpy(ks, var->pk_seed, n);       /* PK.seed */
+    adrs_set_hash_address(var, i + j); /* address */
+    memcpy(ks + n8, (const uint8_t *)var->adrs->u8, 32);
+
+    /* padding */
+    ks[l] = 0x1F; /* shake padding */
+    for (k = l + 1; k < r - 1; k++)
+    {
+      ks[k] = 0;
+    }
+    ks[r - 1] = UINT64_C(1) << 63; /* rate padding */
+    for (k = r; k < 25; k++)
+    {
+      ks[k] = 0;
+    }
+
+    keccak_f1600(ks); /* permutation */
+  }
+  memcpy(tmp, ks, n);
+}
+
+/* Combination WOTS PRF + Chain */
+
+static void shake_wots_chain(slh_var_t *var, uint8_t *tmp, uint32_t s)
+{
+  /* PRF secret key */
+  adrs_set_type(var, ADRS_WOTS_PRF);
+  adrs_set_tree_index(var, 0);
+  shake_prf(var, tmp);
+
+  /* chain */
+  adrs_set_type(var, ADRS_WOTS_HASH);
+  shake_chain(var, tmp, tmp, 0, s);
+}
+
+/* Combination FORS PRF + F (if s == 1) */
+
+static void shake_fors_hash(slh_var_t *var, uint8_t *tmp, uint32_t s)
+{
+  /* PRF secret key */
+  adrs_set_type(var, ADRS_FORS_PRF);
+  adrs_set_tree_height(var, 0);
+  shake_prf(var, tmp);
+
+  /* hash it again */
+  if (s == 1)
+  {
+    adrs_set_type(var, ADRS_FORS_TREE);
+    shake_f(var, tmp, tmp);
+  }
+}
+
+/* parameter sets */
+
+const slh_param_t slh_dsa_shake_128s = {/* .alg_id = */ "SLH-DSA-SHAKE-128s",
+                                        /* .n = */ 16,
+                                        /* .h = */ 63,
+                                        /* .d = */ 7,
+                                        /* .hp = */ 9,
+                                        /* .a = */ 12,
+                                        /* .k = */ 14,
+                                        /* .lg_w = */ 4,
+                                        /* .m = */ 30,
+                                        /* .mk_var = */ shake_mk_var,
+                                        /* .chain = */ shake_chain,
+                                        /* .wots_chain = */ shake_wots_chain,
+                                        /* .fors_hash = */ shake_fors_hash,
+                                        /* .h_msg = */ shake_h_msg,
+                                        /* .prf = */ shake_prf,
+                                        /* .prf_msg = */ shake_prf_msg,
+                                        /* .h_f = */ shake_f,
+                                        /* .h_h = */ shake_h,
+                                        /* .h_t = */ shake_t};
+
+const slh_param_t slh_dsa_shake_128f = {/* .alg_id = */ "SLH-DSA-SHAKE-128f",
+                                        /* .n = */ 16,
+                                        /* .h = */ 66,
+                                        /* .d = */ 22,
+                                        /* .hp = */ 3,
+                                        /* .a = */ 6,
+                                        /* .k = */ 33,
+                                        /* .lg_w = */ 4,
+                                        /* .m = */ 34,
+                                        /* .mk_var = */ shake_mk_var,
+                                        /* .chain = */ shake_chain,
+                                        /* .wots_chain = */ shake_wots_chain,
+                                        /* .fors_hash = */ shake_fors_hash,
+                                        /* .h_msg = */ shake_h_msg,
+                                        /* .prf = */ shake_prf,
+                                        /* .prf_msg = */ shake_prf_msg,
+                                        /* .h_f = */ shake_f,
+                                        /* .h_h = */ shake_h,
+                                        /* .h_t = */ shake_t};
+
+const slh_param_t slh_dsa_shake_192s = {/* .alg_id = */ "SLH-DSA-SHAKE-192s",
+                                        /* .n = */ 24,
+                                        /* .h = */ 63,
+                                        /* .d = */ 7,
+                                        /* .hp = */ 9,
+                                        /* .a = */ 14,
+                                        /* .k = */ 17,
+                                        /* .lg_w = */ 4,
+                                        /* .m = */ 39,
+                                        /* .mk_var = */ shake_mk_var,
+                                        /* .chain = */ shake_chain,
+                                        /* .wots_chain = */ shake_wots_chain,
+                                        /* .fors_hash = */ shake_fors_hash,
+                                        /* .h_msg = */ shake_h_msg,
+                                        /* .prf = */ shake_prf,
+                                        /* .prf_msg = */ shake_prf_msg,
+                                        /* .h_f = */ shake_f,
+                                        /* .h_h = */ shake_h,
+                                        /* .h_t = */ shake_t};
+
+const slh_param_t slh_dsa_shake_192f = {/* .alg_id = */ "SLH-DSA-SHAKE-192f",
+                                        /* .n = */ 24,
+                                        /* .h = */ 66,
+                                        /* .d = */ 22,
+                                        /* .hp = */ 3,
+                                        /* .a = */ 8,
+                                        /* .k = */ 33,
+                                        /* .lg_w = */ 4,
+                                        /* .m = */ 42,
+                                        /* .mk_var = */ shake_mk_var,
+                                        /* .chain = */ shake_chain,
+                                        /* .wots_chain = */ shake_wots_chain,
+                                        /* .fors_hash = */ shake_fors_hash,
+                                        /* .h_msg = */ shake_h_msg,
+                                        /* .prf = */ shake_prf,
+                                        /* .prf_msg = */ shake_prf_msg,
+                                        /* .h_f = */ shake_f,
+                                        /* .h_h = */ shake_h,
+                                        /* .h_t = */ shake_t};
+
+const slh_param_t slh_dsa_shake_256s = {/* .alg_id = */ "SLH-DSA-SHAKE-256s",
+                                        /* .n = */ 32,
+                                        /* .h = */ 64,
+                                        /* .d = */ 8,
+                                        /* .hp = */ 8,
+                                        /* .a = */ 14,
+                                        /* .k = */ 22,
+                                        /* .lg_w = */ 4,
+                                        /* .m = */ 47,
+                                        /* .mk_var = */ shake_mk_var,
+                                        /* .chain = */ shake_chain,
+                                        /* .wots_chain = */ shake_wots_chain,
+                                        /* .fors_hash = */ shake_fors_hash,
+                                        /* .h_msg = */ shake_h_msg,
+                                        /* .prf = */ shake_prf,
+                                        /* .prf_msg = */ shake_prf_msg,
+                                        /* .h_f = */ shake_f,
+                                        /* .h_h = */ shake_h,
+                                        /* .h_t = */ shake_t};
+
+const slh_param_t slh_dsa_shake_256f = {/* .alg_id = */ "SLH-DSA-SHAKE-256f",
+                                        /* .n = */ 32,
+                                        /* .h = */ 68,
+                                        /* .d = */ 17,
+                                        /* .hp = */ 4,
+                                        /* .a = */ 9,
+                                        /* .k = */ 35,
+                                        /* .lg_w = */ 4,
+                                        /* .m = */ 49,
+                                        /* .mk_var = */ shake_mk_var,
+                                        /* .chain = */ shake_chain,
+                                        /* .wots_chain = */ shake_wots_chain,
+                                        /* .fors_hash = */ shake_fors_hash,
+                                        /* .h_msg = */ shake_h_msg,
+                                        /* .prf = */ shake_prf,
+                                        /* .prf_msg = */ shake_prf_msg,
+                                        /* .h_f = */ shake_f,
+                                        /* .h_h = */ shake_h,
+                                        /* .h_t = */ shake_t};
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_sys.h b/src/sig/slh_dsa/slh_dsa_c/slh_sys.h
new file mode 100644 (file)
index 0000000..48eabf2
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) The mlkem-native project authors
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+#ifndef SLH_SYS_H
+#define SLH_SYS_H
+
+/*
+ * C90 does not have the inline compiler directive yet.
+ * We don't use it in C90 builds.
+ * However, in that case the compiler warns about some inline functions in
+ * header files not being used in every compilation unit that includes that
+ * header. To work around it we silence that warning in that case using
+ * __attribute__((unused)).
+ */
+
+/* Do not use inline for C90 builds*/
+#if !defined(SLH_INLINE)
+#if !defined(inline)
+#if defined(_MSC_VER)
+#define SLH_INLINE __inline
+/* Don't combine __inline and __forceinline */
+#define SLH_ALWAYS_INLINE __forceinline
+#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define SLH_INLINE inline
+#define SLH_ALWAYS_INLINE SLH_INLINE __attribute__((always_inline))
+#else
+#define SLH_INLINE __attribute__((unused))
+#define SLH_ALWAYS_INLINE SLH_INLINE
+#endif
+
+#else /* !inline */
+#define SLH_INLINE inline
+#define SLH_ALWAYS_INLINE SLH_INLINE __attribute__((always_inline))
+#endif /* inline */
+#endif /* !SLH_INLINE */
+
+#endif /* SLH_SYS_H */
diff --git a/src/sig/slh_dsa/slh_dsa_c/slh_var.h b/src/sig/slh_dsa/slh_dsa_c/slh_var.h
new file mode 100644 (file)
index 0000000..3be27a4
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) The slhdsa-c project authors
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
+ */
+
+/* === Internal parameter definition structure. */
+
+#ifndef _SLH_VAR_H_
+#define _SLH_VAR_H_
+
+#include "sha2_api.h"
+#include "slh_param.h"
+
+/* some structural sizes */
+
+#ifdef SLH_EXPERIMENTAL
+
+/* a and hp adjusted to facilitate experimental parameter sets */
+#define SLH_MAX_N 32
+#define SLH_MAX_LEN (2 * SLH_MAX_N + 3)
+#define SLH_MAX_K 35
+#define SLH_MAX_HP 20
+#define SLH_MAX_A 24
+#define SLH_MAX_M 49
+
+#else /* !SLH_EXPERIMENTAL */
+
+/* maximum parameter sizes for FIPS 205 parameters */
+#define SLH_MAX_N 32
+#define SLH_MAX_LEN (2 * SLH_MAX_N + 3)
+#define SLH_MAX_K 35
+#define SLH_MAX_HP 9
+#define SLH_MAX_A 14
+#define SLH_MAX_M 49
+
+#endif
+
+/* context */
+struct slh_var_s
+{
+  const slh_param_t *prm;
+  uint8_t sk_seed[SLH_MAX_N];
+  uint8_t sk_prf[SLH_MAX_N];
+  uint8_t pk_seed[SLH_MAX_N];
+  uint8_t pk_root[SLH_MAX_N];
+
+  adrs_t *adrs;  /* regular pointer */
+  adrs_t t_adrs; /* local ADRS buffer */
+
+  /* precomputed values */
+  sha2_256_t sha2_256_pk_seed;
+  sha2_512_t sha2_512_pk_seed;
+};
+
+/* === Lower-level functions */
+
+/* Core signing function (of a randomized digest) with initialized context. */
+size_t slh_do_sign(slh_var_t *var, uint8_t *sig, const uint8_t *digest);
+
+/* _SLH_VAR_H_ */
+#endif
diff --git a/src/sig/slh_dsa/templates/slh_dsa_alg_support_template.jinja b/src/sig/slh_dsa/templates/slh_dsa_alg_support_template.jinja
new file mode 100644 (file)
index 0000000..23e0922
--- /dev/null
@@ -0,0 +1,10 @@
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_IDENTIFIER_LIST_START
+ADD_ENABLE_BY_ALG
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_IDENTIFIER_LIST_END
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ADD_ENABLE_BY_ALG_START
+option(OQS_ENABLE_SIG_SLH_DSA "Enable slh_dsa algorithm family" ON)
+{% for variant in variants -%}
+cmake_dependent_option(OQS_ENABLE_SIG_slh_dsa_{{variant}} "" ON "OQS_ENABLE_SIG_SLH_DSA" OFF)
+{% endfor %}
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ADD_ENABLE_BY_ALG_END
diff --git a/src/sig/slh_dsa/templates/slh_dsa_cmake_template.jinja b/src/sig/slh_dsa/templates/slh_dsa_cmake_template.jinja
new file mode 100644 (file)
index 0000000..336a87c
--- /dev/null
@@ -0,0 +1,19 @@
+# SPDX-License-Identifier: MIT
+
+set(_SLH_DSA_OBJS "")
+
+if (OQS_ENABLE_SIG_SLH_DSA)
+       add_library(slh_dsa_c OBJECT
+                   {% for file in sources -%}
+                   {{ file }}
+                   {% endfor -%}
+                  )
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/slh_dsa_c)
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/pure)
+    {% for prehashHashAlg in prehashHashAlgs -%}
+    target_include_directories(slh_dsa_c PRIVATE ${CMAKE_CURRENT_LIST_DIR}/wrappers/prehash_{{prehashHashAlg}})
+    {% endfor %}
+    set(_SLH_DSA_OBJS ${_SLH_DSA_OBJS} $<TARGET_OBJECTS:slh_dsa_c>)
+endif()
+
+set(SLH_DSA_OBJS ${_SLH_DSA_OBJS} PARENT_SCOPE)
\ No newline at end of file
diff --git a/src/sig/slh_dsa/templates/slh_dsa_docs_yml_template.jinja b/src/sig/slh_dsa/templates/slh_dsa_docs_yml_template.jinja
new file mode 100644 (file)
index 0000000..4ab5ad1
--- /dev/null
@@ -0,0 +1,52 @@
+name: SLH-DSA
+type: signature
+principal-submitters:
+- Andreas Hülsing
+auxiliary-submitters:
+- Daniel J. Bernstein
+- Christoph Dobraunig
+- Maria Eichlseder
+- Scott Fluhrer
+- Stefan-Lukas Gazdag
+- Panos Kampanakis
+- Stefan Kolbl
+- Tanja Lange
+- Martin M Lauridsen
+- Florian Mendel
+- Ruben Niederhagen
+- Christian Rechberger
+- Joost Rijneveld
+- Peter Schwabe
+- Jean-Philippe Aumasson
+- Bas Westerbaan
+- Ward Beullens
+crypto-assumption: hash-based signatures
+website: https://csrc.nist.gov/pubs/fips/205/final
+nist-round: FIPS205
+spec-version: SLH-DSA
+spdx-license-identifier: MIT or ISC or Apache 2.0
+primary-upstream:
+  source: https://github.com/pq-code-package/slhdsa-c/commit/{{commitHash}}
+  spdx-license-identifier: MIT or ISC or Apache 2.0
+  upstream-ancestors:
+  - https://github.com/pq-code-package/slhdsa-c
+parameter-sets:
+
+  {% for imp in implementations -%}
+  - name: {{imp.variant}}
+    claimed-nist-level: {{imp.paramSet.claimedNISTLevel}}
+    claimed-security: EUF-CMA
+    length-public-key: {{imp.paramSet.pkSize}}
+    length-secret-key: {{imp.paramSet.skSize}}
+    length-signature: {{imp.paramSet.sigSize}}
+    implementations-switch-on-runtime-cpu-features: true
+    implementations:
+    - upstream: primary-upstream
+      upstream-id: slhdsa-c
+      supported-platforms: all
+      no-secret-dependent-branching-claimed: false
+      no-secret-dependent-branching-checked-by-valgrind: false
+      large-stack-usage: true
+      
+  {% endfor %}
+  
\ No newline at end of file
diff --git a/src/sig/slh_dsa/templates/slh_dsa_header_template.jinja b/src/sig/slh_dsa/templates/slh_dsa_header_template.jinja
new file mode 100644 (file)
index 0000000..0b55045
--- /dev/null
@@ -0,0 +1,44 @@
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_0_START
+// SPDX-License-Identifier: MIT
+
+#ifndef OQS_SIG_SLH_DSA_H
+#define OQS_SIG_SLH_DSA_H
+
+#include <oqs/oqs.h>
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_0_END
+
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_BODY_START
+{% if pure == true %}
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}})
+#define OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_length_public_key {{pkSize}}
+#define OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_length_secret_key {{skSize}}
+#define OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_length_signature {{sigSize}}
+
+OQS_SIG *OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+{% else %}
+#if defined(OQS_ENABLE_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}})
+#define OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_length_public_key {{pkSize}}
+#define OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_length_secret_key {{skSize}}
+#define OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_length_signature {{sigSize}}
+
+OQS_SIG *OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_new(void);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_keypair(uint8_t *public_key, uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *secret_key);
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx, size_t ctxlen, const uint8_t *public_key);
+#endif
+{% endif %}
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_BODY_END
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_2_START
+#endif
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_2_END
\ No newline at end of file
diff --git a/src/sig/slh_dsa/templates/slh_dsa_oqsconfig_template.jinja b/src/sig/slh_dsa/templates/slh_dsa_oqsconfig_template.jinja
new file mode 100644 (file)
index 0000000..fbfb6a7
--- /dev/null
@@ -0,0 +1,11 @@
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_IDENTIFIER_LIST_START
+ADD_ALG_ENABLE_DEFINES
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_IDENTIFIER_LIST_END
+
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ADD_ALG_ENABLE_DEFINES_START
+#cmakedefine OQS_ENABLE_SIG_SLH_DSA 1
+{% for variant in variants -%}
+#cmakedefine OQS_ENABLE_SIG_slh_dsa_{{variant}} 1
+{% endfor %}
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ADD_ALG_ENABLE_DEFINES_END
\ No newline at end of file
diff --git a/src/sig/slh_dsa/templates/slh_dsa_sig_c_template.jinja b/src/sig/slh_dsa/templates/slh_dsa_sig_c_template.jinja
new file mode 100644 (file)
index 0000000..6d9608a
--- /dev/null
@@ -0,0 +1,31 @@
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_IDENTIFIER_LIST_START
+ALGID ENABLED SIGNEW
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_IDENTIFIER_LIST_END
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGID_START
+               {% for variant in variants -%}
+                       OQS_SIG_alg_slh_dsa_{{variant}},
+               {% endfor %}
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGID_END
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ENABLED_START
+       {% for variant in variants -%}
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_{{variant}})) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_{{variant}}
+               return 1;
+#else
+               return 0;
+#endif
+       {% endfor %}    
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ENABLED_END
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_SIGNEW_START
+       {% for variant in variants -%}
+       } else if (0 == strcasecmp(method_name, OQS_SIG_alg_slh_dsa_{{variant}})) {
+#ifdef OQS_ENABLE_SIG_slh_dsa_{{variant}}
+               return OQS_SIG_slh_dsa_{{variant}}_new();
+#else
+               return NULL;
+#endif
+       {% endfor %}    
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_SIGNEW_END
\ No newline at end of file
diff --git a/src/sig/slh_dsa/templates/slh_dsa_sig_h_template.jinja b/src/sig/slh_dsa/templates/slh_dsa_sig_h_template.jinja
new file mode 100644 (file)
index 0000000..3b634f6
--- /dev/null
@@ -0,0 +1,24 @@
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_IDENTIFIER_LIST_START
+ALGID ALGS_LENGTH INCLUDE
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_IDENTIFIER_LIST_END
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGID_START
+{% for variant in variants -%}
+/** Algorithm identifier for slh_dsa_{{variant}} */
+#define OQS_SIG_alg_slh_dsa_{{ variant }} "SLH_DSA_{{ variant|upper }}"
+{% endfor %}
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGID_END
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGS_LENGTH_START
+{% set unary %}{% for variant in variants %}1{% endfor %}{% endset %}
+/** Number of algorithm identifiers above. */
+#define OQS_SIG_SLH_DSA_algs_length {{ unary|length }}
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_ALGS_LENGTH_END
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_INCLUDE_START
+#ifdef OQS_ENABLE_SIG_SLH_DSA
+#include <oqs/sig_slh_dsa.h>
+#endif /* OQS_ENABLE_SIG_SLH_DSA */
+
+##### OQS_COPY_FROM_SLH_DSA_FRAGMENT_INCLUDE_END
\ No newline at end of file
diff --git a/src/sig/slh_dsa/templates/slh_dsa_src_template.jinja b/src/sig/slh_dsa/templates/slh_dsa_src_template.jinja
new file mode 100644 (file)
index 0000000..cb71417
--- /dev/null
@@ -0,0 +1,232 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+{% if pure == true %}
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}})
+OQS_SIG *OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_{{hashAlg}}_{{paramSet}};
+       sig->alg_version = "{{algVersion}}";
+
+       sig->claimed_nist_level = {{claimedNISTLevel}};
+       sig->euf_cma = {{eufCMA}};
+       sig->suf_cma = {{sufCMA}};
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_{{hashAlg}}_{{paramSet}}_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+{% else %}
+#if defined(OQS_ENABLE_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}})
+OQS_SIG *OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}};
+       sig->alg_version = "{{algVersion}}";
+
+       sig->claimed_nist_level = {{claimedNISTLevel}};
+       sig->euf_cma = {{eufCMA}};
+       sig->suf_cma = {{sufCMA}};
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_keypair;
+       sig->sign = OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_sign;
+       sig->verify = OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       
+       const char *ph = "{{ prehashString|replace('_', '-')|upper }}";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       const char *ph = "{{ prehashString|replace('_', '-')|upper }}";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       const char *ph = "{{ prehashString|replace('_', '-')|upper }}";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_{{prehashHashAlg}}_prehash_{{hashAlg}}_{{paramSet}}_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_{{hashAlg}}_{{paramSet}};
+       const char *ph = "{{ prehashString|replace('_', '-')|upper }}";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+{% endif %}
+#endif
+{{ '\n' }}
\ No newline at end of file
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..91d34c5
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..d273ec3
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..b9cac16
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..88049ce
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..f955f83
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..c1e8539
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..037ac4e
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..80566e2
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..186f176
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..76b72a3
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..03a8a00
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_224/slh_dsa_sha2_224_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..6b04552
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_224_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_224_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_224_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..e4849c2
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..47a99db
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..7879bad
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..1984788
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..336073c
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..dfb4813
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..b089358
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..b096813
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..878139e
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..9f4483f
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..47b861b
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_256/slh_dsa_sha2_256_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..6efee00
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_256_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_256_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_256_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..c220c5f
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..e9d2561
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..c4007f3
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..1b4653d
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..ea41d4c
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..0b611d2
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..263d2a1
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..df9024a
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..9cea3a9
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..0c797b2
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..edd64fe
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_384/slh_dsa_sha2_384_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..6a28335
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_384_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_384_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_384_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..d549413
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..7517a55
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..7774e03
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..193a883
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..acbc172
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..edfdaf7
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..59f037f
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..ee3ebd6
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..4576a73
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..e6a9fab
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..ec298d1
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512/slh_dsa_sha2_512_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..d909516
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..b34cf1e
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..30e92f2
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..e158410
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..52299dd
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..df83c73
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..9a7f539
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..3627f6e
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..e13859e
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..db96f85
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..cf8f553
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..443a072
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_224/slh_dsa_sha2_512_224_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..832739a
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_224_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_224_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512/224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512/224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_224_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512/224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..80ea2c1
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..5dffef1
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..a2a61c7
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..c79fd90
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..7cb35f4
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..b2a99bf
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..26e0892
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..19af7d1
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..02b2d7b
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..010218b
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..d27ac54
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha2_512_256/slh_dsa_sha2_512_256_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..13445b3
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha2_512_256_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha2_512_256_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512/256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512/256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha2_512_256_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA2-512/256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..4994b0e
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..9211fe5
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..1279de9
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..c2246fd
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..db56eb6
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..b6eccfc
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..99e7715
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..9918fe0
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..a74f54c
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..15594fe
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..11a4548
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_224/slh_dsa_sha3_224_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..8905162
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_224_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_224_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-224";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-224";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_224_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-224";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..5d2edc6
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..753f884
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..3b113d1
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..7916c43
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..958676a
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..2158f15
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..ade7908
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..88c99e1
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..fc1c8bc
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..e972ebc
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..9ddf1e5
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_256/slh_dsa_sha3_256_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..a205ad7
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_256_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_256_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_256_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..98cd33d
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..2fbe7d2
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..695aefa
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..3665cff
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..c0ddd76
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..6b665c3
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..145d37d
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..98c2ba4
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..668f1f4
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..8d553aa
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..fa92b24
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_384/slh_dsa_sha3_384_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..6649644
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_384_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_384_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-384";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-384";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_384_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-384";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..9b6facf
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..ea3dc64
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..42316dd
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..7a1359f
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..25e9e94
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..fb9228b
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..77c5d31
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..1dd996a
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..d4ba81b
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..a73d89c
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..41a69b2
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_sha3_512/slh_dsa_sha3_512_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..a3337ef
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_sha3_512_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_sha3_512_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-512";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-512";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_sha3_512_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHA3-512";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..6458b3e
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..1987bd9
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..9e4a0ae
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..d353962
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..162f49e
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..ffef69d
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..dcfecef
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..0854775
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..464ffa2
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..54b27f7
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..2805534
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_shake_128/slh_dsa_shake_128_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..c44134a
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_128_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_128_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHAKE-128";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHAKE-128";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_128_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHAKE-128";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_128f.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_128f.c
new file mode 100644 (file)
index 0000000..dfee560
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_128s.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_128s.c
new file mode 100644 (file)
index 0000000..67084d9
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_192f.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_192f.c
new file mode 100644 (file)
index 0000000..6553c55
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_192s.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_192s.c
new file mode 100644 (file)
index 0000000..be9d5f4
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_256f.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_256f.c
new file mode 100644 (file)
index 0000000..86debad
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_256s.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_sha2_256s.c
new file mode 100644 (file)
index 0000000..7b60f10
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_sha2_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_128f.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_128f.c
new file mode 100644 (file)
index 0000000..1cd932a
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_128s.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_128s.c
new file mode 100644 (file)
index 0000000..e180605
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_128s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_192f.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_192f.c
new file mode 100644 (file)
index 0000000..7411636
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_192s.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_192s.c
new file mode 100644 (file)
index 0000000..5f43825
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_192s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_256f.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_256f.c
new file mode 100644 (file)
index 0000000..4218da1
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256f_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_256s.c b/src/sig/slh_dsa/wrappers/prehash_shake_256/slh_dsa_shake_256_prehash_shake_256s.c
new file mode 100644 (file)
index 0000000..6f63d17
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_shake_256_prehash_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if(sig == NULL) {
+               return NULL;
+       }
+       sig->method_name = OQS_SIG_alg_slh_dsa_shake_256_prehash_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+       
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_sign(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_verify(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHAKE-256";
+       const uint8_t *ctx_str = NULL;
+       const size_t ctx_str_len = 0;
+
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+       if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_sign_with_ctx_str(uint8_t *signature, 
+       size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *secret_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHAKE-256";
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = hash_slh_sign(signature, message, message_len, ctx_str,
+               ctx_str_len, ph, secret_key, addrnd, prm);
+
+       if(*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_shake_256_prehash_shake_256s_verify_with_ctx_str(const uint8_t *message, 
+       size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, 
+       size_t ctx_str_len, const uint8_t *public_key) {
+       
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const char *ph = "SHAKE-256";
+       int res = hash_slh_verify(message, message_len, signature, signature_len,
+               ctx_str, ctx_str_len, ph, public_key, prm);
+
+   if(res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128f.c
new file mode 100644 (file)
index 0000000..b43706c
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_128f)
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_sha2_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_sha2_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_sha2_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_sha2_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_sha2_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_sha2_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128f_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128f;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128s.c
new file mode 100644 (file)
index 0000000..a155562
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_128s)
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_sha2_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_sha2_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_sha2_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_sha2_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_sha2_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_sha2_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_128s_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_128s;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192f.c
new file mode 100644 (file)
index 0000000..c7e62c8
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_192f)
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_sha2_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_sha2_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_sha2_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_sha2_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_sha2_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_sha2_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192f_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192f;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192s.c
new file mode 100644 (file)
index 0000000..837bb13
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_192s)
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_sha2_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_sha2_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_sha2_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_sha2_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_sha2_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_sha2_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_192s_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_192s;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256f.c
new file mode 100644 (file)
index 0000000..054ec30
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_256f)
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_sha2_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_sha2_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_sha2_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_sha2_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_sha2_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_sha2_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256f_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256f;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256s.c
new file mode 100644 (file)
index 0000000..62a32f4
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_sha2_256s)
+OQS_SIG *OQS_SIG_slh_dsa_pure_sha2_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_sha2_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_sha2_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_sha2_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_sha2_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_sha2_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_sha2_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_sha2_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_sha2_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_sha2_256s_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_sha2_256s;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128f.c
new file mode 100644 (file)
index 0000000..339f6da
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_128f)
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_128f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_shake_128f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_shake_128f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_shake_128f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_shake_128f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_shake_128f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_shake_128f_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_shake_128f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_128f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_128f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128f_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128f;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128s.c
new file mode 100644 (file)
index 0000000..f63dc9b
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_128s)
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_128s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_shake_128s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 1;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_shake_128s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_shake_128s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_shake_128s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_shake_128s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_shake_128s_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_shake_128s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_128s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_128s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_128s_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_128s;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192f.c
new file mode 100644 (file)
index 0000000..33e8265
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_192f)
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_192f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_shake_192f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_shake_192f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_shake_192f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_shake_192f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_shake_192f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_shake_192f_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_shake_192f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_192f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_192f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192f_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192f;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192s.c
new file mode 100644 (file)
index 0000000..0063d7a
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_192s)
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_192s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_shake_192s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 3;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_shake_192s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_shake_192s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_shake_192s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_shake_192s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_shake_192s_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_shake_192s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_192s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_192s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_192s_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_192s;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256f.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256f.c
new file mode 100644 (file)
index 0000000..66e4037
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_256f)
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_256f_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_shake_256f;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_shake_256f_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_shake_256f_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_shake_256f_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_shake_256f_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_shake_256f_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_shake_256f_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_256f_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_256f_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256f_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256f;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
diff --git a/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256s.c b/src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256s.c
new file mode 100644 (file)
index 0000000..f4c6d71
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+#include <stdlib.h>
+
+#include "../../sig_slh_dsa.h"
+#include "../../slh_dsa_c/slh_dsa.h"
+#include "../../slh_dsa_c/slh_prehash.h"
+#include <oqs/oqs.h>
+
+
+#if defined(OQS_ENABLE_SIG_slh_dsa_pure_shake_256s)
+OQS_SIG *OQS_SIG_slh_dsa_pure_shake_256s_new(void) {
+
+       OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG));
+       if (sig == NULL) {
+               return NULL;
+       }
+
+       sig->method_name = OQS_SIG_alg_slh_dsa_pure_shake_256s;
+       sig->alg_version = "FIPS205";
+
+       sig->claimed_nist_level = 5;
+       sig->euf_cma = true;
+       sig->suf_cma = false;
+       sig->sig_with_ctx_support = true;
+
+       sig->length_public_key = OQS_SIG_slh_dsa_pure_shake_256s_length_public_key;
+       sig->length_secret_key = OQS_SIG_slh_dsa_pure_shake_256s_length_secret_key;
+       sig->length_signature = OQS_SIG_slh_dsa_pure_shake_256s_length_signature;
+
+       sig->keypair = OQS_SIG_slh_dsa_pure_shake_256s_keypair;
+       sig->sign = OQS_SIG_slh_dsa_pure_shake_256s_sign;
+       sig->verify = OQS_SIG_slh_dsa_pure_shake_256s_verify;
+       sig->sign_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_256s_sign_with_ctx_str;
+       sig->verify_with_ctx_str = OQS_SIG_slh_dsa_pure_shake_256s_verify_with_ctx_str;
+
+       return sig;
+}
+
+static int slh_randombytes(uint8_t *x, size_t xlen) {
+
+       OQS_randombytes(x, xlen);
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_keypair(uint8_t *public_key, uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       int(*rbg)(uint8_t *x, size_t xlen) = slh_randombytes;
+       return slh_keygen(secret_key, public_key, rbg, prm);
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_sign(uint8_t *signature, size_t *signature_len,
+        const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx, ctxlen,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_verify(const uint8_t *message, size_t message_len,
+        const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       const uint8_t *ctx = NULL;
+       const size_t ctxlen = 0;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx,
+                            ctxlen, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_sign_with_ctx_str(uint8_t *signature,
+        size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str,
+        size_t ctx_str_len, const uint8_t *secret_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+       uint8_t addrnd[32];
+       OQS_randombytes(addrnd, 32);
+
+       *signature_len = slh_sign(signature, message, message_len, ctx_str, ctx_str_len,
+                                 secret_key, addrnd, prm);
+
+       if (*signature_len == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+OQS_API OQS_STATUS OQS_SIG_slh_dsa_pure_shake_256s_verify_with_ctx_str(const uint8_t *message,
+        size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) {
+
+       const slh_param_t *prm = &slh_dsa_shake_256s;
+
+       int res = slh_verify(message, message_len, signature, signature_len, ctx_str,
+                            ctx_str_len, public_key, prm);
+
+       if (res == 0) {
+               return OQS_ERROR;
+       }
+       return OQS_SUCCESS;
+}
+
+#endif
+
index 3b8a3ec6c451e472b777649dd81ce7ab64749434..ab317500a2a7a18c75f23e977931a3ed86a52cd9 100644 (file)
@@ -33,7 +33,7 @@ def test_namespace():
             symbols.append(line)
 
     # ideally this would be just ['oqs', 'pqclean'], but contains exceptions (e.g., providing compat implementations of unavailable platform functions)
-    namespaces = ['oqs', 'pqclean', 'keccak', 'pqcrystals', 'pqmayo', 'init', 'fini', 'seedexpander', '__x86.get_pc_thunk', 'libjade', 'jade', '__jade', '__jasmin_syscall', 'pqcp', 'pqov', '_snova', 'sha3']
+    namespaces = ['oqs', 'pqclean', 'keccak', 'pqcrystals', 'pqmayo', 'init', 'fini', 'seedexpander', '__x86.get_pc_thunk', 'libjade', 'jade', '__jade', '__jasmin_syscall', 'pqcp', 'pqov', '_snova', 'sha3', 'slh', 'sha2', 'shake', 'hash']
     non_namespaced = []
 
     for symbolstr in symbols:
index c69f76c98137426c8635528e1437759e2520cf12..dde7b02a78c150291d476a32a4143f145e3580f0 100644 (file)
@@ -25,6 +25,8 @@ def test_kem(kem_name):
 @pytest.mark.parametrize('sig_name', helpers.available_sigs_by_name())
 def test_sig(sig_name):
     kats = helpers.get_kats("sig")
+    # slh dsa will run ACVP vectors instead
+    if ("SLH_DSA" in sig_name): pytest.skip('slhdsa not enabled for KATs')
     if not(helpers.is_sig_enabled_by_name(sig_name)): pytest.skip('Not enabled')
     output = helpers.run_subprocess(
         [helpers.path_to_executable('kat_sig'), sig_name],
index 36a7bcb5a7f874ec0d4e5fd6b9051430f420ef2d..67354876f2bb51815b6691a8df7a90db64ea0f0e 100644 (file)
@@ -25,6 +25,8 @@ def test_kem(kem_name):
 @pytest.mark.parametrize('sig_name', helpers.available_sigs_by_name())
 def test_sig(sig_name):
     kats = helpers.get_kats("sig")
+    # slh dsa will run ACVP vectors instead
+    if ("SLH_DSA" in sig_name): pytest.skip('slhdsa not enabled for KATs')
     if not(helpers.is_sig_enabled_by_name(sig_name)): pytest.skip('Not enabled')
     output = helpers.run_subprocess(
         [helpers.path_to_executable('kat_sig'), sig_name, '--all'],
index f75fece11a0a97a4544144f914891d125b168767..6c6a52eb0878bd3bc78823bea636fa17b6ea381e 100644 (file)
@@ -18,6 +18,18 @@ def test_kem_leak(kem_name):
 @helpers.filtered_test
 @pytest.mark.parametrize('sig_name', helpers.available_sigs_by_name())
 def test_sig_leak(sig_name):
+    if ("SLH_DSA" in sig_name): pytest.skip()
+    if not(helpers.is_sig_enabled_by_name(sig_name)): pytest.skip('Not enabled')
+    if sys.platform != "linux" or os.system("grep ubuntu /etc/os-release") != 0 or os.system("uname -a | grep x86_64") != 0: pytest.skip('Leak testing not supported on this platform')
+    helpers.run_subprocess(
+        ["valgrind", "-s", "--error-exitcode=1", "--leak-check=full", "--show-leak-kinds=all", helpers.path_to_executable('test_sig'), sig_name],
+    )
+
+@pytest.mark.skipif("SLH_DSA_LEAK_TEST" not in os.environ, reason="SLH DSA leak testing only performed in extended tests")
+@helpers.filtered_test
+@pytest.mark.parametrize('sig_name', helpers.available_sigs_by_name())
+def test_slhdsa_leak(sig_name):
+    if (not ("SLH_DSA" in sig_name)): pytest.skip()
     if not(helpers.is_sig_enabled_by_name(sig_name)): pytest.skip('Not enabled')
     if sys.platform != "linux" or os.system("grep ubuntu /etc/os-release") != 0 or os.system("uname -a | grep x86_64") != 0: pytest.skip('Leak testing not supported on this platform')
     helpers.run_subprocess(
index 107f26e933944ee86322ae2cff12dcced3d4adc8..80fa3f5e5e18b8add79a4737e2cec56dd7c7ad32 100644 (file)
@@ -127,29 +127,35 @@ static OQS_STATUS sig_test_correctness(const char *method_name, bool bitflips_al
        /* testing signing with context, if supported */
        OQS_randombytes(ctx, 257);
        if (sig->sig_with_ctx_support) {
+               size_t ctx_step = 1;
+               // Only do a small fraction of the context sizes for SLH_DSA for efficiency purposes
+               if (!strncmp(sig->method_name, "SLH_DSA", 7)) {
+                       ctx_step = 61; // using a prime slightly smaller than a power of 2 to avoid only testing word/block aligned values
+               }
                for (size_t i = 0; i < 256; ++i) {
-                       rc = OQS_SIG_sign_with_ctx_str(sig, signature, &signature_len, message, message_len, ctx, i, secret_key);
-                       OQS_TEST_CT_DECLASSIFY(&rc, sizeof rc);
-                       if (rc != OQS_SUCCESS) {
-                               fprintf(stderr, "ERROR: OQS_SIG_sign_with_ctx_str failed\n");
-                               goto err;
-                       }
-
-                       OQS_TEST_CT_DECLASSIFY(public_key, sig->length_public_key);
-                       OQS_TEST_CT_DECLASSIFY(signature, signature_len);
-                       rc = OQS_SIG_verify_with_ctx_str(sig, message, message_len, signature, signature_len, ctx, i, public_key);
-                       OQS_TEST_CT_DECLASSIFY(&rc, sizeof rc);
-                       if (rc != OQS_SUCCESS) {
-                               fprintf(stderr, "ERROR: OQS_SIG_verify_with_ctx_str failed\n");
-                               goto err;
+                       if (i % ctx_step == 0 || i == 255) {
+                               rc = OQS_SIG_sign_with_ctx_str(sig, signature, &signature_len, message, message_len, ctx, i, secret_key);
+                               OQS_TEST_CT_DECLASSIFY(&rc, sizeof rc);
+                               if (rc != OQS_SUCCESS) {
+                                       fprintf(stderr, "ERROR: OQS_SIG_sign_with_ctx_str failed\n");
+                                       goto err;
+                               }
+
+                               OQS_TEST_CT_DECLASSIFY(public_key, sig->length_public_key);
+                               OQS_TEST_CT_DECLASSIFY(signature, signature_len);
+                               rc = OQS_SIG_verify_with_ctx_str(sig, message, message_len, signature, signature_len, ctx, i, public_key);
+                               OQS_TEST_CT_DECLASSIFY(&rc, sizeof rc);
+                               if (rc != OQS_SUCCESS) {
+                                       fprintf(stderr, "ERROR: OQS_SIG_verify_with_ctx_str failed\n");
+                                       goto err;
+                               }
+
+                               rc = test_sig_bitflip(sig, message, message_len, signature, signature_len, public_key, bitflips_all, bitflips, true, ctx, i);
+                               OQS_TEST_CT_DECLASSIFY(&rc, sizeof rc);
+                               if (rc != OQS_SUCCESS) {
+                                       goto err;
+                               }
                        }
-
-                       rc = test_sig_bitflip(sig, message, message_len, signature, signature_len, public_key, bitflips_all, bitflips, true, ctx, i);
-                       OQS_TEST_CT_DECLASSIFY(&rc, sizeof rc);
-                       if (rc != OQS_SUCCESS) {
-                               goto err;
-                       }
-
                }
 
                rc = OQS_SIG_sign_with_ctx_str(sig, signature, &signature_len, message, message_len, ctx, 256, secret_key);
@@ -325,7 +331,7 @@ int main(int argc, char **argv) {
        char no_thread_sig_patterns[][MAX_LEN_SIG_NAME_]  = {"MAYO-5", "cross-rsdp-128-small", "cross-rsdp-192-small", "cross-rsdp-256-balanced", "cross-rsdp-256-small", "cross-rsdpg-192-small", "cross-rsdpg-256-small", "SNOVA_37_17_2", "SNOVA_56_25_2", "SNOVA_49_11_3", "SNOVA_37_8_4", "SNOVA_24_5_5", "SNOVA_60_10_4", "SNOVA_29_6_5"};
        int test_in_thread = 1;
        for (size_t i = 0 ; i < sizeof(no_thread_sig_patterns) / MAX_LEN_SIG_NAME_; ++i) {
-               if (strstr(alg_name, no_thread_sig_patterns[i]) != NULL) {
+               if ( (strncmp(alg_name, "SLH_DSA", 7) == 0) || (strstr(alg_name, no_thread_sig_patterns[i]) != NULL) ) {
                        test_in_thread = 0;
                        break;
                }
index 601f7d4ab2c5369b6452d8d18c293d7085ccd294..67c6d7fee1fb356beff47bcdb838bc65d5691118 100644 (file)
@@ -10,7 +10,7 @@ common:
 
 tests:
   sample.crypto.liboqs_signature_example:
-    timeout: 1500
+    timeout: 3600
     integration_platforms:
       - qemu_x86
       - qemu_cortex_a53
index e6034624f406f05471bdec8f0b1b09d514809eb3..54bd0eb367b5f65898f791b9d3445bcdcb89f40a 100644 (file)
@@ -169,7 +169,7 @@ int main(void)
 
        for (int i = 0; i < OQS_SIG_alg_count(); i++) {
                const char *alg_name = OQS_SIG_alg_identifier(i);
-               if (!OQS_SIG_alg_is_enabled(alg_name)) {
+               if ((!OQS_SIG_alg_is_enabled(alg_name)) || !(strncmp("SLH_DSA", alg_name, 7))) {
                        printf("Signature algorithm %s not enabled!\n", alg_name);
                }
                else {