Native PHP extension for post-quantum key encapsulation (ML-KEM) and signatures (ML-DSA, SLH-DSA), with liboqs built in.
php-ext-oqs is a native extension (no FFI) built on the C library liboqs from the Open Quantum Safe (OQS) project. The prebuilt binaries contain liboqs, so there is no system library to install.
Status: experimental. liboqs states that it is meant for research and prototyping and is not currently recommended for production use or for protecting sensitive data. The same applies to this extension, which has not been independently audited.
It provides an object-oriented API for the NIST-standardized PQC algorithms ML-KEM (Kyber), ML-DSA (Dilithium), SLH-DSA (SPHINCS+), and other algorithms supported by liboqs.
Influenced and inspired by great DEF CON 33 - Post Quantum Panic talk by K Karagiannis.
- Key Encapsulation Mechanisms (KEMs): Securely generate and exchange shared secrets using algorithms like ML-KEM.
- Digital Signature Schemes (SIGs): Create and verify signatures with algorithms like ML-DSA.
- Modern API: A clean, object-oriented interface (Oqs\Kem, Oqs\Sig).
- Type Safe: Exposes algorithm identifiers as class constants (e.g., Oqs\Kem::ALG_ML_KEM_768) for safe, typo-free code and IDE autocompletion.
- Exception-based Error Handling: Throws Oqs\Exception for clear error handling.
- PHP 8.1+ (prebuilt binaries: PHP 8.1 - 8.5, non-thread-safe, Linux glibc x86_64/arm64 and macOS arm64)
- Nothing else for the prebuilt binaries: liboqs is linked statically into
oqs.so. - Only when building from source: PHP development headers (php-dev, phpize), a C compiler, make, cmake, and liboqs.
- config.m4 - contains the code that will go into the configure script. checks for the oqs/oqs.h header and uses pkg-config to find the liboqs library, fallback to a hardcoded prefix
- php_oqs.h - header file containing C declarations and macro definitionsto be shared between several source files. defines the necessary object structs (php_oqs_kem_obj, php_oqs_sig_obj) and utility functions for fetching these objects
- oqs.c (module init + class registration) sets up the module entry, defines the custom object handlers, and registers the Oqs\Kem and Oqs\Sig classes with their respective methods
- sig.c (module init + class registration)
- kem.c (module init + class registration)
- tests - unit tests
- Expose Algorithm Details
- Implement Dedicated Key Objects?
- Expose Algorithm Names as Constants
- Add Documentation on KDFs
- Safety: The extension has no module globals and no per-request state; the only state is the liboqs handle owned by each
Oqs\Kem/Oqs\Sigobject. - Input validation: keys and ciphertexts of the wrong length are rejected with
Oqs\Exceptionbefore they reach liboqs.Sig::verify()returnsfalsefor a signature of impossible length. - Output Format: All cryptographic outputs (keys, ciphertexts, signatures) are returned as raw binary strings.
- liboqs Version: release 0.2.0 bundles liboqs 0.16.0 (each release names its bundled liboqs in CHANGELOG.md;
php --ri oqsshows it at runtime). Because liboqs is linked statically, a liboqs security fix reaches you through a new release of this extension, not through a system update. The set ofALG_*constants follows whatever the linked liboqs enables, so it changes between liboqs releases (0.16.0 dropped theSPHINCS+-*names in favour ofSLH-DSA, and added HQC, eFrodoKEM and MQOM).
Every release ships prebuilt binaries. They contain liboqs, so there is nothing to compile and no library to install.
| Platform | PHP | Asset |
|---|---|---|
Linux x86_64 (glibc 2.34+: Debian 12+, Ubuntu 22.04+, RHEL 9+, official php Docker images) |
8.1 - 8.5 NTS | php_oqs-<version>_php<X.Y>-x86_64-linux-glibc.zip |
| Linux arm64 (same) | 8.1 - 8.5 NTS | php_oqs-<version>_php<X.Y>-arm64-linux-glibc.zip |
| macOS 13+ Apple Silicon | 8.1 - 8.5 NTS | php_oqs-<version>_php<X.Y>-arm64-darwin-bsdlibc.zip |
Not covered yet: Alpine (musl), thread-safe (ZTS) PHP, Intel Macs, Windows. On those, build from source (below).
PIE picks the right binary for your PHP, installs it and enables it:
pie install guycalledseven/php-ext-oqsIf there is no binary for your platform, PIE falls back to a source build. That needs liboqs on the system and its location: pie install guycalledseven/php-ext-oqs --with-oqs=/usr/local.
VERSION=0.2.0
PHP_MM=$(php -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')
ASSET="php_oqs-${VERSION}_php${PHP_MM}-x86_64-linux-glibc.zip" # pick the asset for your platform
curl -fsSLO "https://github.com/guycalledseven/php-ext-oqs/releases/download/$VERSION/$ASSET"
unzip -o "$ASSET" oqs.so -d "$(php -r 'echo ini_get("extension_dir");')"Then enable it by adding extension=oqs to a php.ini (php --ini lists the files in use), and check:
php --ri oqsmacOS only: a file downloaded with a browser is quarantined, clear that once with xattr -d com.apple.quarantine "$(php -r 'echo ini_get("extension_dir");')/oqs.so".
FROM php:8.4-cli
ARG OQS_VERSION=0.2.0
RUN set -eux; \
arch="$(uname -m | sed 's/aarch64/arm64/')"; \
curl -fsSL -o /tmp/oqs.zip "https://github.com/guycalledseven/php-ext-oqs/releases/download/${OQS_VERSION}/php_oqs-${OQS_VERSION}_php${PHP_VERSION%.*}-${arch}-linux-glibc.zip"; \
php -r '$z = new PharData("/tmp/oqs.zip"); $z->extractTo(ini_get("extension_dir"), "oqs.so", true);'; \
rm /tmp/oqs.zip; \
docker-php-ext-enable oqsThe release binaries are produced by ci/build.sh, which builds liboqs and the extension in a scratch directory, runs the tests and writes the zip to dist/:
ci/build.sh # for the PHP on your PATH
ci/docker-build.sh 8.4 # Linux binary, inside the official php:8.4-cli-bookworm imageThe manual steps follow.
Debian:
sudo apt install cmake libssl-dev php-devmacOS:
brew install cmakeInstall liboqs into a prefix outside this directory. make clean deletes every *.a below the extension directory, which would silently remove a liboqs installed inside it.
git clone --depth=1 --branch 0.16.0 https://github.com/open-quantum-safe/liboqs
OQS_PREFIX="$(cd .. && pwd)/deps/liboqs-0.16.0" # or /usr/local (then install with sudo)
cmake -S liboqs -B liboqs/build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DOQS_BUILD_ONLY_LIB=ON \
-DOQS_USE_OPENSSL=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_INSTALL_PREFIX="$OQS_PREFIX"
cmake --build liboqs/build --parallel
cmake --install liboqs/buildbuild php extension
phpize --clean; phpize
OQS_COMMIT=$(git -C liboqs rev-parse --short HEAD) ./configure --with-oqs="$OQS_PREFIX"
make clean && make -jAn explicit --with-oqs=DIR always wins over pkg-config. If DIR/lib/liboqs.a exists it is linked statically (-force_load on macOS, --whole-archive on Linux); configure fails if DIR contains no liboqs at all.
confirm if static
otool -L modules/oqs.so
# Expected: does NOT list liboqs.*dylib. Only /usr/lib/libSystem.B.dylib.Check which liboqs actually got linked (headers and library versions must agree):
php -d extension=$PWD/modules/oqs.so --ri oqs | grep liboqsgit clone --depth=1 https://github.com/open-quantum-safe/liboqs
cmake -S liboqs -B liboqs/build -DBUILD_SHARED_LIBS=ON -DOQS_DIST_BUILD=ON
cmake --build liboqs/build --parallel
sudo cmake --build liboqs/build --target install
sudo ldconfig || truerm -rf build/* run-tests.php
phpize
# macOS
./configure --with-php-config=/opt/homebrew/opt/php/bin/php-config
# Debian
# ./configure --enable-oqs
phpize
OQS_COMMIT=$(git -C /path/to/liboqs rev-parse --short HEAD) \
./configure --with-oqs=/usr/local
make clean && make -jNO_INTERACTION=1 make test # all tests
NO_INTERACTION=1 make test TESTS=tests/001-basic.phpt # a single test
cp modules/oqs.so "$(php -r 'echo ini_get("extension_dir") . "\n";')"
# enable macOS
xattr -dr com.apple.quarantine /opt/homebrew/lib/php/pecl/20240924/oqs.so
install_name_tool -add_rpath /opt/homebrew/lib "$(php -i | awk -F'=> ' '/^extension_dir/ {print $2}')/oqs.so"
# enable on linux
php -i | grep extension_dir
echo "extension=oqs.so" | sudo tee /etc/php/$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')/mods-available/oqs.ini
sudo phpenmod oqs 2>/dev/null || true
# php -r '$f = php_ini_scanned_files(); echo $f ? dirname(explode(",", $f)[0]) . "\n" : "none\n";'php -q --info
test in browser with phpinfo
php -S localhost:8000 -t www
open http://localhost:8000macOS config after setup
/opt/homebrew/etc/php/8.4/conf.d/oqs.ini
extension=oqsGenerate the IDE stub file:
php generate-docs.php --format=stub > oqs.stub.phpGenerate the Markdown file: (This command is unchanged)
php generate-docs.php --format=markdown > OQS_CONSTANTS.mdphp -m | grep oqs
php -r '[$k]=[new Oqs\Kem("ML-KEM-768")]; var_dump($k->sizes());'macOS:
otool -L oqs.so
oqs.so:
@rpath/liboqs.8.dylib (compatibility version 8.0.0, current version 0.14.1)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1356.0.0)
nm -gU oqs.so
00000000000009dc T _get_module
00000000000081d8 S _oqs_ce_kem
00000000000081e0 S _oqs_ce_sig
0000000000008128 D _oqs_module_entry
00000000000009e8 T _zim_Kem___construct
0000000000000f58 T _zim_Kem_algorithms
0000000000000d9c T _zim_Kem_decap
0000000000000cec T _zim_Kem_encap
0000000000000b78 T _zim_Kem_keypair
0000000000000ac0 T _zim_Kem_sizes
0000000000000fe8 T _zim_Sig___construct
0000000000001658 T _zim_Sig_algorithms
00000000000010c0 T _zim_Sig_keypair
0000000000001234 T _zim_Sig_sign
00000000000014d8 T _zim_Sig_verify
00000000000009a4 T _zm_info_oqs
00000000000006d0 T _zm_startup_oqslinux:
ldd modules/oqs.so
linux-vdso.so.1 (0x0000f8f78ca51000)
liboqs.so.8 => /usr/local/lib/liboqs.so.8 (0x0000f8f78c430000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000f8f78c270000)
/lib/ld-linux-aarch64.so.1 (0x0000f8f78ca14000)
libcrypto.so.3 => /lib/aarch64-linux-gnu/libcrypto.so.3 (0x0000f8f78bdf0000)
nm -gU modules/oqs.so
0000000000001f30 T get_module
0000000000020398 B oqs_ce_kem
0000000000020390 B oqs_ce_sig
0000000000020150 D oqs_module_entry
00000000000027a4 T zim_Kem_algorithms
0000000000001f40 T zim_Kem___construct
0000000000002570 T zim_Kem_decap
0000000000002320 T zim_Kem_encap
0000000000002190 T zim_Kem_keypair
00000000000020c0 T zim_Kem_sizes
0000000000003050 T zim_Sig_algorithms
0000000000002830 T zim_Sig___construct
00000000000029b0 T zim_Sig_keypair
0000000000002b40 T zim_Sig_sign
0000000000002e50 T zim_Sig_verify
0000000000001ab0 T zm_info_oqs
0000000000001d30 T zm_startup_oqs
objdump --disassemble-all modules/oqs.soKEM implementation returns a raw shared secret. In practice, this shared secret should almost never be used directly as an encryption key. It should be used as input to a Key Derivation Function (KDF) like HKDF to produce keys of the desired length and properties.
It is strongly recommended to use PHP's built-in hash_hkdf() function.
// Example of best practice
[$ct, $shared_secret] = $kem->encap($pk);
// Now, derive a 32-byte AES key and a 16-byte IV from the shared secret
$keying_material = hash_hkdf('sha256', $shared_secret, 48, 'my-app-encryption', 'some-salt');
$aes_key = substr($keying_material, 0, 32);
$iv = substr($keying_material, 32, 16);<?php
use Oqs\Kem;
use Oqs\Sig;
// 1. Key Encapsulation (KEM) Example with ML-KEM
$kem = new Kem(Kem::ALG_ML_KEM_768);
// Generate a public/private key pair
[$publicKey, $secretKey] = $kem->keypair();
// A client encapsulates a secret against the public key,
// generating a ciphertext and a shared secret.
[$ciphertext, $sharedSecretA] = $kem->encap($publicKey);
// The server decapsulates the ciphertext with the secret key
// to derive the same shared secret.
$sharedSecretB = $kem->decap($ciphertext, $secretKey);
assert($sharedSecretA === $sharedSecretB);
echo "KEM shared secrets match!\n";
// IMPORTANT: The raw shared secret should be passed through a KDF
// like HKDF before being used as an encryption key.
$encryption_key = hash_hkdf('sha256', $sharedSecretA, 32, 'my-app-aes-key');
// 2. Digital Signature (SIG) Example with ML-DSA
$sig = new Sig(Sig::ALG_ML_DSA_65);
// Generate a signing key pair
[$signingPublicKey, $signingSecretKey] = $sig->keypair();
$message = "This is the message to sign.";
// Sign the message with the secret key
$signature = $sig->sign($message, $signingSecretKey);
// Verify the signature against the message and public key
$isValid = $sig->verify($message, $signature, $signingPublicKey);
assert($isValid === true);
echo "Signature is valid!\n";You can retrieve detailed metadata about an algorithm using the details() method.
$kem = new Oqs\Kem('Kyber512');
$details = $kem->details();
print_r($details);
/* Output:
Array
(
[name] => Kyber512
[version] => ...
[claimed_nist_level] => 1
[ind_cca] => 1
[length_public_key] => 800
[length_secret_key] => 1632
[length_ciphertext] => 768
[length_shared_secret] => 32
)
*/use Oqs\Kem;
use Oqs\Sig;
use Oqs\Exception as OqsException;
$kem = new Kem('ML-KEM-768');
$s = $kem->sizes(); // ['pk'=>..,'sk'=>..,'ct'=>..,'ss'=>..]
[$pk,$sk] = $kem->keypair(); // returns [pk, sk] as binary strings
[$ct,$ssA] = $kem->encap($pk); // encaps → [ciphertext, shared_secret]
$ssB = $kem->decap($ct, $sk); // decaps → shared_secret
assert($ssA === $ssB);
$sig = new Sig('ML-DSA-65');
[$spk,$ssk] = $sig->keypair();
$signature = $sig->sign("hello", $ssk);
$ok = $sig->verify("hello", $signature, $spk); // bool
Kem::algorithms(); // list enabled KEM names
Sig::algorithms(); // list enabled SIG names
try {
// This will now throw an Oqs\Exception
$kem = new Kem('Some-Invalid-Algorithm');
} catch (OqsException $e) {
// This block will ONLY catch exceptions thrown from your extension.
echo "Caught an OQS-specific error: " . $e->getMessage();
} catch (\Exception $e) {
// Other general errors would be caught here.
echo "Caught a generic error: " . $e->getMessage();
}Comparation with similar php extension php-liboqs:
- Object-oriented API design vs static.
- Error handling with a custom
Oqs\Exception. - Complete function signatures (
arginfo) for better IDE/static analysis support. - An extra useful method (
Kem::sizes()).
These constants provide version information for the underlying liboqs C library that the extension was compiled against.
| Constant Name | Value |
|---|---|
Oqs\VERSION_MAJOR |
0 |
Oqs\VERSION_MINOR |
16 |
Oqs\VERSION_PATCH |
0 |
Oqs\VERSION_TEXT |
0.16.0 |
| Constant Name | Algorithm Value |
|---|---|
ALG_BIKE_L1 |
BIKE-L1 |
ALG_BIKE_L3 |
BIKE-L3 |
ALG_BIKE_L5 |
BIKE-L5 |
ALG_CLASSIC_MCELIECE_348864 |
Classic-McEliece-348864 |
ALG_CLASSIC_MCELIECE_348864F |
Classic-McEliece-348864f |
ALG_CLASSIC_MCELIECE_460896 |
Classic-McEliece-460896 |
ALG_CLASSIC_MCELIECE_460896F |
Classic-McEliece-460896f |
ALG_CLASSIC_MCELIECE_6688128 |
Classic-McEliece-6688128 |
ALG_CLASSIC_MCELIECE_6688128F |
Classic-McEliece-6688128f |
ALG_CLASSIC_MCELIECE_6960119 |
Classic-McEliece-6960119 |
ALG_CLASSIC_MCELIECE_6960119F |
Classic-McEliece-6960119f |
ALG_CLASSIC_MCELIECE_8192128 |
Classic-McEliece-8192128 |
ALG_CLASSIC_MCELIECE_8192128F |
Classic-McEliece-8192128f |
ALG_EFRODOKEM_1344_AES |
eFrodoKEM-1344-AES |
ALG_EFRODOKEM_1344_SHAKE |
eFrodoKEM-1344-SHAKE |
ALG_EFRODOKEM_640_AES |
eFrodoKEM-640-AES |
ALG_EFRODOKEM_640_SHAKE |
eFrodoKEM-640-SHAKE |
ALG_EFRODOKEM_976_AES |
eFrodoKEM-976-AES |
ALG_EFRODOKEM_976_SHAKE |
eFrodoKEM-976-SHAKE |
ALG_FRODOKEM_1344_AES |
FrodoKEM-1344-AES |
ALG_FRODOKEM_1344_SHAKE |
FrodoKEM-1344-SHAKE |
ALG_FRODOKEM_640_AES |
FrodoKEM-640-AES |
ALG_FRODOKEM_640_SHAKE |
FrodoKEM-640-SHAKE |
ALG_FRODOKEM_976_AES |
FrodoKEM-976-AES |
ALG_FRODOKEM_976_SHAKE |
FrodoKEM-976-SHAKE |
ALG_HQC_1 |
HQC-1 |
ALG_HQC_3 |
HQC-3 |
ALG_HQC_5 |
HQC-5 |
ALG_KYBER1024 |
Kyber1024 |
ALG_KYBER512 |
Kyber512 |
ALG_KYBER768 |
Kyber768 |
ALG_ML_KEM_1024 |
ML-KEM-1024 |
ALG_ML_KEM_512 |
ML-KEM-512 |
ALG_ML_KEM_768 |
ML-KEM-768 |
ALG_NTRU_HPS_2048_509 |
NTRU-HPS-2048-509 |
ALG_NTRU_HPS_2048_677 |
NTRU-HPS-2048-677 |
ALG_NTRU_HPS_4096_1229 |
NTRU-HPS-4096-1229 |
ALG_NTRU_HPS_4096_821 |
NTRU-HPS-4096-821 |
ALG_NTRU_HRSS_1373 |
NTRU-HRSS-1373 |
ALG_NTRU_HRSS_701 |
NTRU-HRSS-701 |
ALG_SNTRUP761 |
sntrup761 |
| Constant Name | Algorithm Value |
|---|---|
ALG_CROSS_RSDPG_128_BALANCED |
cross-rsdpg-128-balanced |
ALG_CROSS_RSDPG_128_FAST |
cross-rsdpg-128-fast |
ALG_CROSS_RSDPG_128_SMALL |
cross-rsdpg-128-small |
ALG_CROSS_RSDPG_192_BALANCED |
cross-rsdpg-192-balanced |
ALG_CROSS_RSDPG_192_FAST |
cross-rsdpg-192-fast |
ALG_CROSS_RSDPG_192_SMALL |
cross-rsdpg-192-small |
ALG_CROSS_RSDPG_256_BALANCED |
cross-rsdpg-256-balanced |
ALG_CROSS_RSDPG_256_FAST |
cross-rsdpg-256-fast |
ALG_CROSS_RSDPG_256_SMALL |
cross-rsdpg-256-small |
ALG_CROSS_RSDP_128_BALANCED |
cross-rsdp-128-balanced |
ALG_CROSS_RSDP_128_FAST |
cross-rsdp-128-fast |
ALG_CROSS_RSDP_128_SMALL |
cross-rsdp-128-small |
ALG_CROSS_RSDP_192_BALANCED |
cross-rsdp-192-balanced |
ALG_CROSS_RSDP_192_FAST |
cross-rsdp-192-fast |
ALG_CROSS_RSDP_192_SMALL |
cross-rsdp-192-small |
ALG_CROSS_RSDP_256_BALANCED |
cross-rsdp-256-balanced |
ALG_CROSS_RSDP_256_FAST |
cross-rsdp-256-fast |
ALG_CROSS_RSDP_256_SMALL |
cross-rsdp-256-small |
ALG_FALCON_1024 |
Falcon-1024 |
ALG_FALCON_512 |
Falcon-512 |
ALG_FALCON_PADDED_1024 |
Falcon-padded-1024 |
ALG_FALCON_PADDED_512 |
Falcon-padded-512 |
ALG_MAYO_1 |
MAYO-1 |
ALG_MAYO_2 |
MAYO-2 |
ALG_MAYO_3 |
MAYO-3 |
ALG_MAYO_5 |
MAYO-5 |
ALG_ML_DSA_44 |
ML-DSA-44 |
ALG_ML_DSA_65 |
ML-DSA-65 |
ALG_ML_DSA_87 |
ML-DSA-87 |
ALG_MQOM2_CAT1_GF16_FAST_R3 |
mqom2_cat1_gf16_fast_r3 |
ALG_MQOM2_CAT1_GF16_FAST_R5 |
mqom2_cat1_gf16_fast_r5 |
ALG_MQOM2_CAT1_GF16_SHORT_R3 |
mqom2_cat1_gf16_short_r3 |
ALG_MQOM2_CAT1_GF16_SHORT_R5 |
mqom2_cat1_gf16_short_r5 |
ALG_MQOM2_CAT3_GF16_FAST_R3 |
mqom2_cat3_gf16_fast_r3 |
ALG_MQOM2_CAT3_GF16_FAST_R5 |
mqom2_cat3_gf16_fast_r5 |
ALG_MQOM2_CAT3_GF16_SHORT_R3 |
mqom2_cat3_gf16_short_r3 |
ALG_MQOM2_CAT3_GF16_SHORT_R5 |
mqom2_cat3_gf16_short_r5 |
ALG_MQOM2_CAT5_GF16_FAST_R3 |
mqom2_cat5_gf16_fast_r3 |
ALG_MQOM2_CAT5_GF16_FAST_R5 |
mqom2_cat5_gf16_fast_r5 |
ALG_MQOM2_CAT5_GF16_SHORT_R3 |
mqom2_cat5_gf16_short_r3 |
ALG_MQOM2_CAT5_GF16_SHORT_R5 |
mqom2_cat5_gf16_short_r5 |
ALG_OV_III |
OV-III |
ALG_OV_III_PKC |
OV-III-pkc |
ALG_OV_III_PKC_SKC |
OV-III-pkc-skc |
ALG_OV_IP |
OV-Ip |
ALG_OV_IP_PKC |
OV-Ip-pkc |
ALG_OV_IP_PKC_SKC |
OV-Ip-pkc-skc |
ALG_OV_IS |
OV-Is |
ALG_OV_IS_PKC |
OV-Is-pkc |
ALG_OV_IS_PKC_SKC |
OV-Is-pkc-skc |
ALG_OV_V |
OV-V |
ALG_OV_V_PKC |
OV-V-pkc |
ALG_OV_V_PKC_SKC |
OV-V-pkc-skc |
ALG_SLH_DSA_PURE_SHA2_128F |
SLH_DSA_PURE_SHA2_128F |
ALG_SLH_DSA_PURE_SHA2_128S |
SLH_DSA_PURE_SHA2_128S |
ALG_SLH_DSA_PURE_SHA2_192F |
SLH_DSA_PURE_SHA2_192F |
ALG_SLH_DSA_PURE_SHA2_192S |
SLH_DSA_PURE_SHA2_192S |
ALG_SLH_DSA_PURE_SHA2_256F |
SLH_DSA_PURE_SHA2_256F |
ALG_SLH_DSA_PURE_SHA2_256S |
SLH_DSA_PURE_SHA2_256S |
ALG_SLH_DSA_PURE_SHAKE_128F |
SLH_DSA_PURE_SHAKE_128F |
ALG_SLH_DSA_PURE_SHAKE_128S |
SLH_DSA_PURE_SHAKE_128S |
ALG_SLH_DSA_PURE_SHAKE_192F |
SLH_DSA_PURE_SHAKE_192F |
ALG_SLH_DSA_PURE_SHAKE_192S |
SLH_DSA_PURE_SHAKE_192S |
ALG_SLH_DSA_PURE_SHAKE_256F |
SLH_DSA_PURE_SHAKE_256F |
ALG_SLH_DSA_PURE_SHAKE_256S |
SLH_DSA_PURE_SHAKE_256S |
ALG_SLH_DSA_SHA2_224_PREHASH_SHA2_128F |
SLH_DSA_SHA2_224_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA2_224_PREHASH_SHA2_128S |
SLH_DSA_SHA2_224_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA2_224_PREHASH_SHA2_192F |
SLH_DSA_SHA2_224_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA2_224_PREHASH_SHA2_192S |
SLH_DSA_SHA2_224_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA2_224_PREHASH_SHA2_256F |
SLH_DSA_SHA2_224_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA2_224_PREHASH_SHA2_256S |
SLH_DSA_SHA2_224_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA2_224_PREHASH_SHAKE_128F |
SLH_DSA_SHA2_224_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA2_224_PREHASH_SHAKE_128S |
SLH_DSA_SHA2_224_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA2_224_PREHASH_SHAKE_192F |
SLH_DSA_SHA2_224_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA2_224_PREHASH_SHAKE_192S |
SLH_DSA_SHA2_224_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA2_224_PREHASH_SHAKE_256F |
SLH_DSA_SHA2_224_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA2_224_PREHASH_SHAKE_256S |
SLH_DSA_SHA2_224_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA2_256_PREHASH_SHA2_128F |
SLH_DSA_SHA2_256_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA2_256_PREHASH_SHA2_128S |
SLH_DSA_SHA2_256_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA2_256_PREHASH_SHA2_192F |
SLH_DSA_SHA2_256_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA2_256_PREHASH_SHA2_192S |
SLH_DSA_SHA2_256_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA2_256_PREHASH_SHA2_256F |
SLH_DSA_SHA2_256_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA2_256_PREHASH_SHA2_256S |
SLH_DSA_SHA2_256_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA2_256_PREHASH_SHAKE_128F |
SLH_DSA_SHA2_256_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA2_256_PREHASH_SHAKE_128S |
SLH_DSA_SHA2_256_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA2_256_PREHASH_SHAKE_192F |
SLH_DSA_SHA2_256_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA2_256_PREHASH_SHAKE_192S |
SLH_DSA_SHA2_256_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA2_256_PREHASH_SHAKE_256F |
SLH_DSA_SHA2_256_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA2_256_PREHASH_SHAKE_256S |
SLH_DSA_SHA2_256_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA2_384_PREHASH_SHA2_128F |
SLH_DSA_SHA2_384_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA2_384_PREHASH_SHA2_128S |
SLH_DSA_SHA2_384_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA2_384_PREHASH_SHA2_192F |
SLH_DSA_SHA2_384_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA2_384_PREHASH_SHA2_192S |
SLH_DSA_SHA2_384_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA2_384_PREHASH_SHA2_256F |
SLH_DSA_SHA2_384_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA2_384_PREHASH_SHA2_256S |
SLH_DSA_SHA2_384_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA2_384_PREHASH_SHAKE_128F |
SLH_DSA_SHA2_384_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA2_384_PREHASH_SHAKE_128S |
SLH_DSA_SHA2_384_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA2_384_PREHASH_SHAKE_192F |
SLH_DSA_SHA2_384_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA2_384_PREHASH_SHAKE_192S |
SLH_DSA_SHA2_384_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA2_384_PREHASH_SHAKE_256F |
SLH_DSA_SHA2_384_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA2_384_PREHASH_SHAKE_256S |
SLH_DSA_SHA2_384_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHA2_128F |
SLH_DSA_SHA2_512_224_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHA2_128S |
SLH_DSA_SHA2_512_224_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHA2_192F |
SLH_DSA_SHA2_512_224_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHA2_192S |
SLH_DSA_SHA2_512_224_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHA2_256F |
SLH_DSA_SHA2_512_224_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHA2_256S |
SLH_DSA_SHA2_512_224_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128F |
SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128S |
SLH_DSA_SHA2_512_224_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192F |
SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192S |
SLH_DSA_SHA2_512_224_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256F |
SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256S |
SLH_DSA_SHA2_512_224_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHA2_128F |
SLH_DSA_SHA2_512_256_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHA2_128S |
SLH_DSA_SHA2_512_256_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHA2_192F |
SLH_DSA_SHA2_512_256_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHA2_192S |
SLH_DSA_SHA2_512_256_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHA2_256F |
SLH_DSA_SHA2_512_256_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHA2_256S |
SLH_DSA_SHA2_512_256_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128F |
SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128S |
SLH_DSA_SHA2_512_256_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192F |
SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192S |
SLH_DSA_SHA2_512_256_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256F |
SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256S |
SLH_DSA_SHA2_512_256_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA2_512_PREHASH_SHA2_128F |
SLH_DSA_SHA2_512_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA2_512_PREHASH_SHA2_128S |
SLH_DSA_SHA2_512_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA2_512_PREHASH_SHA2_192F |
SLH_DSA_SHA2_512_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA2_512_PREHASH_SHA2_192S |
SLH_DSA_SHA2_512_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA2_512_PREHASH_SHA2_256F |
SLH_DSA_SHA2_512_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA2_512_PREHASH_SHA2_256S |
SLH_DSA_SHA2_512_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA2_512_PREHASH_SHAKE_128F |
SLH_DSA_SHA2_512_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA2_512_PREHASH_SHAKE_128S |
SLH_DSA_SHA2_512_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA2_512_PREHASH_SHAKE_192F |
SLH_DSA_SHA2_512_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA2_512_PREHASH_SHAKE_192S |
SLH_DSA_SHA2_512_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA2_512_PREHASH_SHAKE_256F |
SLH_DSA_SHA2_512_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA2_512_PREHASH_SHAKE_256S |
SLH_DSA_SHA2_512_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA3_224_PREHASH_SHA2_128F |
SLH_DSA_SHA3_224_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA3_224_PREHASH_SHA2_128S |
SLH_DSA_SHA3_224_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA3_224_PREHASH_SHA2_192F |
SLH_DSA_SHA3_224_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA3_224_PREHASH_SHA2_192S |
SLH_DSA_SHA3_224_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA3_224_PREHASH_SHA2_256F |
SLH_DSA_SHA3_224_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA3_224_PREHASH_SHA2_256S |
SLH_DSA_SHA3_224_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA3_224_PREHASH_SHAKE_128F |
SLH_DSA_SHA3_224_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA3_224_PREHASH_SHAKE_128S |
SLH_DSA_SHA3_224_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA3_224_PREHASH_SHAKE_192F |
SLH_DSA_SHA3_224_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA3_224_PREHASH_SHAKE_192S |
SLH_DSA_SHA3_224_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA3_224_PREHASH_SHAKE_256F |
SLH_DSA_SHA3_224_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA3_224_PREHASH_SHAKE_256S |
SLH_DSA_SHA3_224_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA3_256_PREHASH_SHA2_128F |
SLH_DSA_SHA3_256_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA3_256_PREHASH_SHA2_128S |
SLH_DSA_SHA3_256_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA3_256_PREHASH_SHA2_192F |
SLH_DSA_SHA3_256_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA3_256_PREHASH_SHA2_192S |
SLH_DSA_SHA3_256_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA3_256_PREHASH_SHA2_256F |
SLH_DSA_SHA3_256_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA3_256_PREHASH_SHA2_256S |
SLH_DSA_SHA3_256_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA3_256_PREHASH_SHAKE_128F |
SLH_DSA_SHA3_256_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA3_256_PREHASH_SHAKE_128S |
SLH_DSA_SHA3_256_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA3_256_PREHASH_SHAKE_192F |
SLH_DSA_SHA3_256_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA3_256_PREHASH_SHAKE_192S |
SLH_DSA_SHA3_256_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA3_256_PREHASH_SHAKE_256F |
SLH_DSA_SHA3_256_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA3_256_PREHASH_SHAKE_256S |
SLH_DSA_SHA3_256_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA3_384_PREHASH_SHA2_128F |
SLH_DSA_SHA3_384_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA3_384_PREHASH_SHA2_128S |
SLH_DSA_SHA3_384_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA3_384_PREHASH_SHA2_192F |
SLH_DSA_SHA3_384_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA3_384_PREHASH_SHA2_192S |
SLH_DSA_SHA3_384_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA3_384_PREHASH_SHA2_256F |
SLH_DSA_SHA3_384_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA3_384_PREHASH_SHA2_256S |
SLH_DSA_SHA3_384_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA3_384_PREHASH_SHAKE_128F |
SLH_DSA_SHA3_384_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA3_384_PREHASH_SHAKE_128S |
SLH_DSA_SHA3_384_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA3_384_PREHASH_SHAKE_192F |
SLH_DSA_SHA3_384_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA3_384_PREHASH_SHAKE_192S |
SLH_DSA_SHA3_384_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA3_384_PREHASH_SHAKE_256F |
SLH_DSA_SHA3_384_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA3_384_PREHASH_SHAKE_256S |
SLH_DSA_SHA3_384_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHA3_512_PREHASH_SHA2_128F |
SLH_DSA_SHA3_512_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHA3_512_PREHASH_SHA2_128S |
SLH_DSA_SHA3_512_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHA3_512_PREHASH_SHA2_192F |
SLH_DSA_SHA3_512_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHA3_512_PREHASH_SHA2_192S |
SLH_DSA_SHA3_512_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHA3_512_PREHASH_SHA2_256F |
SLH_DSA_SHA3_512_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHA3_512_PREHASH_SHA2_256S |
SLH_DSA_SHA3_512_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHA3_512_PREHASH_SHAKE_128F |
SLH_DSA_SHA3_512_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHA3_512_PREHASH_SHAKE_128S |
SLH_DSA_SHA3_512_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHA3_512_PREHASH_SHAKE_192F |
SLH_DSA_SHA3_512_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHA3_512_PREHASH_SHAKE_192S |
SLH_DSA_SHA3_512_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHA3_512_PREHASH_SHAKE_256F |
SLH_DSA_SHA3_512_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHA3_512_PREHASH_SHAKE_256S |
SLH_DSA_SHA3_512_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHA2_128F |
SLH_DSA_SHAKE_128_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHA2_128S |
SLH_DSA_SHAKE_128_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHA2_192F |
SLH_DSA_SHAKE_128_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHA2_192S |
SLH_DSA_SHAKE_128_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHA2_256F |
SLH_DSA_SHAKE_128_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHA2_256S |
SLH_DSA_SHAKE_128_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHAKE_128F |
SLH_DSA_SHAKE_128_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHAKE_128S |
SLH_DSA_SHAKE_128_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHAKE_192F |
SLH_DSA_SHAKE_128_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHAKE_192S |
SLH_DSA_SHAKE_128_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHAKE_256F |
SLH_DSA_SHAKE_128_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHAKE_128_PREHASH_SHAKE_256S |
SLH_DSA_SHAKE_128_PREHASH_SHAKE_256S |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHA2_128F |
SLH_DSA_SHAKE_256_PREHASH_SHA2_128F |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHA2_128S |
SLH_DSA_SHAKE_256_PREHASH_SHA2_128S |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHA2_192F |
SLH_DSA_SHAKE_256_PREHASH_SHA2_192F |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHA2_192S |
SLH_DSA_SHAKE_256_PREHASH_SHA2_192S |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHA2_256F |
SLH_DSA_SHAKE_256_PREHASH_SHA2_256F |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHA2_256S |
SLH_DSA_SHAKE_256_PREHASH_SHA2_256S |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHAKE_128F |
SLH_DSA_SHAKE_256_PREHASH_SHAKE_128F |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHAKE_128S |
SLH_DSA_SHAKE_256_PREHASH_SHAKE_128S |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHAKE_192F |
SLH_DSA_SHAKE_256_PREHASH_SHAKE_192F |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHAKE_192S |
SLH_DSA_SHAKE_256_PREHASH_SHAKE_192S |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHAKE_256F |
SLH_DSA_SHAKE_256_PREHASH_SHAKE_256F |
ALG_SLH_DSA_SHAKE_256_PREHASH_SHAKE_256S |
SLH_DSA_SHAKE_256_PREHASH_SHAKE_256S |
ALG_SNOVA_24_5_4 |
SNOVA_24_5_4 |
ALG_SNOVA_24_5_4_ESK |
SNOVA_24_5_4_esk |
ALG_SNOVA_24_5_4_SHAKE |
SNOVA_24_5_4_SHAKE |
ALG_SNOVA_24_5_4_SHAKE_ESK |
SNOVA_24_5_4_SHAKE_esk |
ALG_SNOVA_24_5_5 |
SNOVA_24_5_5 |
ALG_SNOVA_25_8_3 |
SNOVA_25_8_3 |
ALG_SNOVA_29_6_5 |
SNOVA_29_6_5 |
ALG_SNOVA_37_17_2 |
SNOVA_37_17_2 |
ALG_SNOVA_37_8_4 |
SNOVA_37_8_4 |
ALG_SNOVA_49_11_3 |
SNOVA_49_11_3 |
ALG_SNOVA_56_25_2 |
SNOVA_56_25_2 |
ALG_SNOVA_60_10_4 |
SNOVA_60_10_4 |